Generating configuration files for configuring an information technology infrastructure

ABSTRACT

A method for generating a configuration file for configuring an information technology infrastructure is provided. The method may include receiving, from a first user at a first client, a first indication to publish an infrastructure module comprising a set of configurations to apply to an information technology infrastructure. The infrastructure module may be stored in a module registry in response to the first indication. A second indication selecting the infrastructure module may be received from a second user at a second client. In response to the second indication, the infrastructure module may be sent from the module registry to the second client for insertion into a configuration file being created at the second client. The insertion of the infrastructure module may incorporate, into configuration file, the set of configurations to apply to the information technology infrastructure. Related systems and articles of manufacture, including computer program products, are also provided.

CROSS REFERENCE TO RELATED APPLICATIONS

This application claims priority to U.S. Provisional Application No.62/776,433, filed on Dec. 6, 2018 and entitled “LIFECYCLE MANAGEMENT FORINFORMATION TECHNOLOGY INFRASTRUCTURE,” U.S. Provisional Application No.62/776,434, filed on Dec. 6, 2018 and entitled “VALIDATION OF EXECUTIONPLAN FOR CONFIGURING AN INFORMATION TECHNOLOGY INFRASTRUCTURE,” and U.S.Provisional Application No. 62/776,437, filed on Dec. 6, 2018 andentitled “GENERATING CONFIGURATION FILES FOR CONFIGURING AN INFORMATIONTECHNOLOGY INFRASTRUCTURE,” the disclosures of which are incorporatedherein by references in their entirety.

TECHNICAL FIELD

The present disclosure generally relates to information technologyinfrastructure and, more specifically, to lifecycle management forinformation technology infrastructure including the provisioning,modification, and/or de-provisioning of the underlying resources.

BACKGROUND

Information technology (IT) infrastructure may refer to the hardwareresources, software resources, and/or network resources forming anenterprise's information technology environment. For example, hardwareresources may include servers, computers, data centers, switches, hubs,routers, and/or the like. Meanwhile, software resources may includeenterprise resource planning (ERP) software applications, customerrelationship management (CRM) software applications, productivitysoftware applications, and/or the like. The network resources of theenterprise's information technology infrastructure may include anyresources providing network enablement, network connectivity, networksecurity, and/or the like.

The information technology infrastructure of the enterprise may enablethe delivery of information technology services and/or solutions to avariety of internal and external users including, for example,employees, partners, customers, and/or the like. For instance, thehardware resources of the enterprise's information technologyinfrastructure may be used to host the software resources. At least someof the software resources within the enterprise's information technologyinfrastructure may be available remotely, for example, as asoftware-as-a-service (SaaS), a web application, and/or the like. Remoteaccess to these software resources may be enabled and/or regulated bythe network resources within the enterprise's information technologyinfrastructure.

SUMMARY

Methods, systems, and articles of manufacture, including computerprogram products, are provided for managing information technology (IT)infrastructure. In some implementations of the current subject matter,there is provided a system. The system can include at least one dataprocessor. The system can further include at least one memory storinginstructions that result in operations when executed by the at least onedata processor. The operations can include: receiving, from a first userat a first client, a first indication to publish a first infrastructuremodule, the first infrastructure module comprising a first set ofconfigurations to apply to an information technology infrastructure;responding to the first indication by at least storing, in a moduleregistry, the first infrastructure module; receiving, from a second userat a second client, a second indication selecting the firstinfrastructure module; and responding to the second indication by atleast sending, from the module registry to the second client, the firstinfrastructure module for insertion into a configuration file beingcreated at the second client, the insertion of the first infrastructuremodule incorporating, into configuration file, the first set ofconfigurations to apply to the information technology infrastructure.

In some variations, one or more features disclosed herein including thefollowing features may optionally be included in any feasiblecombination. A webhook may be registered at a version controller inresponse to the first indication. The webhook may be configured to posta notification in response to a first version of the firstinfrastructure module and/or a second version of the firstinfrastructure module being committed to the version controller. Thefirst version of the first infrastructure module and/or the secondversion of the first infrastructure module may be pulled from theversion controller in response to the notification.

In some variations, a user interface may be generated to display, at thesecond client, a selection of infrastructure modules for insertion intothe configuration file. The selection of infrastructure modules mayinclude the first infrastructure module. The selection of infrastructuremodules may further include a second infrastructure module thatcomprises a second set of configurations to apply to the informationtechnology infrastructure. The second user at the second client mayinteract with the user interface to merge, into a workspace, theconfiguration file including the first infrastructure module. Theworkspace may be configured to maintain a plurality of configurations toapply to the information technology infrastructure. The merging of theconfiguration file into the workspace may incorporate, into theplurality of configurations maintained by the workspace, the first setof configurations associated with the first infrastructure module. Inresponse to the configuration file being merged into the workspace, athird indication of the first infrastructure module being used in theworkspace may be sent to the first client.

In some variations, the selection of infrastructure modules may furtherinclude a first version of the first infrastructure module and a secondversion of the first infrastructure module. The second indication fromthe second user may further select the first version of the firstinfrastructure module or the second version of the first infrastructuremodule for insertion into the configuration file.

In some variations, a third indication selecting the secondinfrastructure module may be receive from the second user at the secondclient. In response to the third indication, the second infrastructuremodule may be sent to the second client for insertion into theconfiguration file being created at the second client. The insertion ofthe second infrastructure module may incorporate, into configurationfile, the second set of configurations to apply to the informationtechnology infrastructure.

In some variations, the configuration file may include a programmingcode-based representation of one or more resources at the informationtechnology infrastructure.

In some variations, applying the first set of configurations at theinformation technology infrastructure may include provisioning,modifying, and/or de-provisioning one or more resources at theinformation technology infrastructure.

In some variations, applying the first set of configurations at theinformation technology infrastructure may at least a partially achievesa predefined information technology objective comprising one or more ofsupport for a software application, a multi-tier software application,self-service clusters, a software demonstration, a disposableenvironment, software defined networking, a resource scheduler, and/or amulti-cloud deployment.

In some variations, the module registry may be associated with anorganization. The module registry may be accessible to the first userand the second user based at least on the first user and the second userbeing associated with the organization.

In some variations, the module registry may be accessible to the firstuser but not the second user based at least on a role and/or apermission associated with each of the first user and/or the seconduser.

In another aspect, there is provided a computer-implemented method formanaging information technology (IT) infrastructure. The method caninclude: receiving, from a first user at a first client, a firstindication to publish a first infrastructure module, the firstinfrastructure module comprising a first set of configurations to applyto an information technology infrastructure; responding to the firstindication by at least storing, in a module registry, the firstinfrastructure module; receiving, from a second user at a second client,a second indication selecting the first infrastructure module; andresponding to the second indication by at least sending, from the moduleregistry to the second client, the first infrastructure module forinsertion into a configuration file being created at the second client,the insertion of the first infrastructure module incorporating, intoconfiguration file, the first set of configurations to apply to theinformation technology infrastructure.

In some variations, one or more features disclosed herein including thefollowing features may optionally be included in any feasiblecombination. The method may further include responding to the firstindication by registering, at a version controller, a webhook configuredto post a notification in response to a first version of the firstinfrastructure module and/or a second version of the firstinfrastructure module being committed to the version controller. Thefirst version of the first infrastructure module and/or the secondversion of the first infrastructure module may be pulled from theversion controller in response to the notification.

In some variations, the method may further include generating a userinterface configured to display, at the second client, a selection ofinfrastructure modules for insertion into the configuration file. Theselection of infrastructure modules may include the first infrastructuremodule. The selection of infrastructure modules may further include asecond infrastructure module that comprises a second set ofconfigurations to apply to the information technology infrastructure.The second user at the second client may interact with the userinterface to merge, into a workspace, the configuration file includingthe first infrastructure module. The workspace may be configured tomaintain a plurality of configurations to apply to the informationtechnology infrastructure. The merging of the configuration file intothe workspace may incorporate, into the plurality of configurationsmaintained by the workspace, the first set of configurations associatedwith the first infrastructure module. In response to the configurationfile being merged into the workspace, a third indication of the firstinfrastructure module being used in the workspace may be sent to thefirst client.

In some variations, the selection of infrastructure modules may furtherinclude a first version of the first infrastructure module and a secondversion of the first infrastructure module. The second indication fromthe second user may further select the first version of the firstinfrastructure module or the second version of the first infrastructuremodule for insertion into the configuration file.

In some variations, the method may further include: receiving, from thesecond user at the second client, a third indication selecting thesecond infrastructure module; and responding to the third indication byat least sending, to the second client, the second infrastructure modulefor insertion into the configuration file being created at the secondclient, the insertion of the second infrastructure module incorporating,into configuration file, the second set of configurations to apply tothe information technology infrastructure.

In some variations, the configuration file may include a programmingcode-based representation of one or more resources at the informationtechnology infrastructure.

In some variations, applying the first set of configurations at theinformation technology infrastructure may include provisioning,modifying, and/or de-provisioning one or more resources at theinformation technology infrastructure.

In some variations, applying the first set of configurations at theinformation technology infrastructure may at least a partially achievesa predefined information technology objective comprising one or more ofsupport for a software application, a multi-tier software application,self-service clusters, a software demonstration, a disposableenvironment, software defined networking, a resource scheduler, and/or amulti-cloud deployment.

In some variations, the module registry may be associated with anorganization. The module registry may be accessible to the first userand the second user based at least on the first user and the second userbeing associated with the organization.

In some variations, the module registry may be accessible to the firstuser but not the second user based at least on a role and/or apermission associated with each of the first user and/or the seconduser.

In another aspect, there is provided a non-transitory computer readablemedium storing instructions. The instructions may be executed by atleast one data processor to result in operations. The operations mayinclude: receiving, from a first user at a first client, a firstindication to publish a first infrastructure module, the firstinfrastructure module comprising a first set of configurations to applyto an information technology infrastructure; responding to the firstindication by at least storing, in a module registry, the firstinfrastructure module; receiving, from a second user at a second client,a second indication selecting the first infrastructure module; andresponding to the second indication by at least sending, from the moduleregistry to the second client, the first infrastructure module forinsertion into a configuration file being created at the second client,the insertion of the first infrastructure module incorporating, intoconfiguration file, the first set of configurations to apply to theinformation technology infrastructure.

Implementations of the current subject matter can include, but are notlimited to, methods consistent with the descriptions provided herein aswell as articles that comprise a tangibly embodied machine-readablemedium operable to cause one or more machines (e.g., computers, etc.) toresult in operations implementing one or more of the described features.Similarly, computer systems are also described that may include one ormore processors and one or more memories coupled to the one or moreprocessors. A memory, which can include a non-transitorycomputer-readable or machine-readable storage medium, may include,encode, store, or the like one or more programs that cause one or moreprocessors to perform one or more of the operations described herein.Computer implemented methods consistent with one or more implementationsof the current subject matter can be implemented by one or more dataprocessors residing in a single computing system or multiple computingsystems. Such multiple computing systems can be connected and canexchange data and/or commands or other instructions or the like via oneor more connections, including, for example, to a connection over anetwork (e.g. the Internet, a wireless wide area network, a local areanetwork, a wide area network, a wired network, or the like), via adirect connection between one or more of the multiple computing systems,etc.

The details of one or more variations of the subject matter describedherein are set forth in the accompanying drawings and the descriptionbelow. Other features and advantages of the subject matter describedherein will be apparent from the description and drawings, and from theclaims. While certain features of the currently disclosed subject matterare described for illustrative purposes in relation to the management ofinformation technology infrastructure, it should be readily understoodthat such features are not intended to be limiting. The claims thatfollow this disclosure are intended to define the scope of the protectedsubject matter.

DESCRIPTION OF THE DRAWINGS

The accompanying drawings, which are incorporated in and constitute apart of this specification, show certain aspects of the subject matterdisclosed herein and, together with the description, help explain someof the principles associated with the disclosed implementations. In thedrawings,

FIG. 1A depicts a system diagram illustrating an information technologyinfrastructure management system, in accordance with some exampleembodiments;

FIG. 1B depicts a block diagram illustrating an information technologyinfrastructure controller, in accordance with some example embodiments;

FIG. 1C depicts a block diagram illustrating a module registry, inaccordance with some example embodiments;

FIG. 2 depicts an example of a dependency graph, in accordance with someexample embodiments;

FIG. 3A depicts a flowchart illustrating a process for managing aninformation technology infrastructure, in accordance with some exampleembodiments;

FIG. 3B depicts a flowchart illustrating a process for running anexecution plan to an information technology infrastructure, inaccordance with some example embodiments;

FIG. 3C depicts a flowchart illustrating a process for configuring aninformation technology infrastructure, in accordance with some exampleembodiments;

FIG. 4A depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4B depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4C depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4D depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4E depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4F depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4G depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4H depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4I depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4J depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4K depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4L depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4M depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 4N depicts an example of a user interface for creating andconfiguring a workspace, in accordance with some example embodiments;

FIG. 5A depicts an example of a user interface for managing modules, inaccordance with some example embodiments;

FIG. 5B depicts an example of a user interface for managing modules, inaccordance with some example embodiments;

FIG. 6A depicts an example of a user interface for interacting with runswithin a workspace, in accordance with some example embodiments;

FIG. 6B depicts an example of a user interface for interacting with runswithin a workspace, in accordance with some example embodiments;

FIG. 6C depicts an example of a user interface for interacting with runswithin a workspace, in accordance with some example embodiments; and

FIG. 7 depicts a block diagram illustrating a computing systemconsistent with implementations of the current subject matter.

When practical, like labels are used to refer to same or similar itemsin the drawings.

DETAILED DESCRIPTION

The development of a software application may often be divorced from thesubsequent deployment, testing, and maintenance of the softwareapplication. For instance, a software application may be developed inone environment by a team of software engineers before being deployed toanother environment where the software application is tested and/ormaintained by a separate team of information technology (IT)professionals. The absence of communication and collaboration betweenthe software developers and the information technology professionals mayresult in the development and delivery of a software application that isdifficult to deploy, test, and/or maintain.

Deploying the software application may require configuring anenterprise's information technology infrastructure to host the softwareapplication including, for example, by provisioning, modifying, and/orde-provisioning one or more hardware resources, software resources,network resources, and/or the like. It should be appreciated that theenterprise's information technology infrastructure may include privateresources owned and operated by the enterprise for exclusive use by theenterprise. Alternatively and/or additionally, the enterprise'sinformation technology infrastructure may include public resources ownedand operated by a third party provider including, for example, aninfrastructure-as-a-service (IaaS) provider, a platform-as-a-service(PaaS) provider, a software-as-a-service (SaaS) provider, and/or thelike. Accordingly, the configuration of the enterprise's informationtechnology infrastructure may include provisioning, modifying, and/orde-provisioning private resources and/or public resources to support theoperations of the software application. Moreover, the enterprise'sinformation technology infrastructure may require continuous monitoringand/or updates in order to ensure that the performance of the softwareapplication meets a threshold metric such as, for example, a servicelevel objective (SLO) and/or the like.

In some example embodiments, an information technology (IT)infrastructure controller may be configured to provide lifecyclemanagement for the information technology infrastructure of anenterprise. As noted, the information technology infrastructure of theenterprise may be configured to host a software application and/orensure that the performance of the software application meets athreshold metric (e.g., a service level objective (SLO) and/or thelike). For example, the enterprise's information technologyinfrastructure may be configured by at least provisioning, modifying,and/or de-provisioning one or more resources (e.g., hardware resources,software resources, network resources, and/or the like) within theinformation technology infrastructure in order to accommodate thedeployment, testing, and/or maintenance of the software application.Accordingly, the information technology infrastructure controller maymanage the provisioning, modification, and/or de-provisioning of the oneor more resources engendered by the deployment, testing, and/ormaintenance of the software application.

FIG. 1A depicts a system diagram illustrating an information technology(IT) infrastructure management system 100, in accordance with someexample embodiments. Referring to FIG. 1A, the information technologyinfrastructure management system 100 may include an informationtechnology infrastructure controller 110, a first client 120 a, a secondclient 120 b, and a version controller 140. Furthermore, the informationtechnology infrastructure management system 100 may include one or moreinformation technology infrastructures including, for example, a firstinformation technology infrastructure 130 a, a second informationtechnology infrastructure 130 b, and/or the like. As FIG. 1A shows, theinformation technology infrastructure controller 110, the first client120 a, the second client 120 b, the first information technologyinfrastructure 130 a, the second information technology infrastructure130 b, and/or the version controller 140 may be communicatively coupledvia a network 150. The network 150 may be any wired and/or wirelessnetwork including, for example, a local area network (LAN), a wide areanetwork (WAN), a public land mobile network (PLMN), the Internet, and/orthe like.

Referring again to FIG. 1A, each of the first information technologyinfrastructure 130 a and the second information technologyinfrastructure 130 b may include a plurality of resources from one ormore different providers including, for example, physical equipment,virtual machines, and/or the like. To further illustrate, FIG. 1A showsthe first information technology infrastructure 130 a as including, forexample, hardware resources 135 a, software resources 135 b, networkresources 135 c, and/or the like. Moreover, FIG. 1A shows that the firstinformation technology infrastructure 130 a may include resources frommultiple providers including, for example, a first provider 150 a, asecond provider 150 b, and/or the like. For example, at least one of thefirst provider 150 a and the second provider 150 b may be a privateprovider such that at least a portion of the hardware resources 135 a,the software resources 135 b, and/or the network resources 135 c areprivate resources owned and operated by an enterprise for exclusive useby the enterprise. Alternatively and/or additionally, at least one ofthe first provider 150 a and/or the second provider 150 b may be a thirdparty provider including, for example, an infrastructure-as-a-service(IaaS) provider, a platform-as-a-service (PaaS) provider, asoftware-as-a-service (SaaS) provider, and/or the like. As such, atleast a portion of the hardware resources 135 a, the software resources135 b, and/or the network resources 135 c may be public resources sharedamongst multiple enterprises.

In some example embodiments, the information technology infrastructurecontroller 110 may be configured to provide lifecycle management for oneor more information technology infrastructures including, for example,the first information technology infrastructure 130 a, the secondinformation technology infrastructure 130 b, and/or the like. Forexample, the information technology infrastructure controller 110 mayprovide lifecycle management for the first information technologyinfrastructure 130 a by at least managing the provisioning, modifying,and/or de-provisioning of one or more of the hardware resources 135 a,the software resources 135 b, and the network resources 135 c. Theprovisioning, modifying, and/or de-provisioning of one or more of thehardware resources 135 a, the software resources 135 b, and the networkresources 135 c may be engendered by the deployment, testing, and/ormaintenance of a software application.

In some example embodiments, the information technology infrastructurecontroller 110 may provision, modify, and/or de-provision one or moreresources in the first information technology infrastructure 130 aand/or the second information technology infrastructure 130 b as part ofconfiguring the first information technology infrastructure 130 a and/orthe second information technology infrastructure 130 b to host thesoftware application and/or to ensure that the performance of thesoftware application meets a threshold metric (e.g., a service levelobjective (SLO) and/or the like). However, it should be appreciated thatthe first information technology infrastructure 130 a and/or the secondinformation technology infrastructure 130 b may be configured and/orreconfigured to achieve any information technology objective including,for example, support for multi-tier software applications, self-serviceclusters, software demonstrations, disposable environments (e.g.,production environments, staging environments, and/or the like),software defined networking, resource schedulers, multi-clouddeployment, and/or the like.

In some example embodiments, at least a portion of the first informationtechnology infrastructure 130 a and/or the second information technologyinfrastructure 130 b may be configured using infrastructure as code(IaC). That is, instead of and/or in addition to physical hardwareconfiguration, the first information technology infrastructure 130 aand/or the second information technology infrastructure 130 b may beconfigured via software using, for example, one or more configurationfiles specifying the configurations to apply to the first informationtechnology infrastructure 130 a and/or the second information technologyinfrastructure 130 b as well as one or more corresponding variables. Forinstance, in order to support the deployment, testing, and/ormaintenance of a software application at the first informationtechnology infrastructure 130 a, the first information technologyinfrastructure 130 a may be configured based on a first configurationfile 125 a and/or a second configuration file 125 b createdrespectively, for example, by a first user 145 a at the first client 120a and a second user 145 b at the second client 120 b. As shown in FIG.1A, the first user 145 a at the first client 120 a and the second user145 b at the second client 120 b may be associated with a sameorganization, for example, an organization 155. However, it should beappreciated that the first user 145 a at the first client 120 a and thesecond user 145 b at the second client 120 b may be associated withdifferent organizations.

The first configuration file 125 a and the second configuration file 125b may each include a programming code-based representation of thehardware resources 135 a, the software resources 135 b, and/or thenetwork resources 135 c in the information technology infrastructure130. For example, the first configuration file 125 a and/or the secondconfiguration file 125 b may be rendered in a configuration language(e.g., HashiCorp Configuration Language (HCL) provided by HashiCorp, SanFrancisco, Calif.) and/or a data interchange language (e.g., JavaScriptObject Notation (JSON)) that is human readable and editable as well asmachine readable. Moreover, the first configuration file 125 a and/orthe second configuration file 125 b may specify one or moreconfigurations to apply to the first information technologyinfrastructure 130 a including, for example, the provisioning,modification, and/or de-provisioning of the hardware resources 135 a,the software resources 135 b, and/or the network resources 135 c.

To further illustrate, Table 1 below depicts the syntax of aconfiguration language such as, for example, HashiCorp ConfigurationLanguage (HCL).

TABLE 1 # An AMI variable “ami” { description = “the AMI to use” } /* Amulti  line comment. */ resource “aws_instance” “web” { ami =“${var.ami}” count = 2 source_dest_check = false connection { user =“root” } }

Table 2 below depicts the syntax of a data interchange language such as,for example, JavaScript Object Notation (JSON).

TABLE 2 { “variable”: { “ami”: { “description”: “the AMI to use” } },“resource”: { “aws_instance”: { “web”: { “ami”: “${var.ami}”, “count”:2, “source_dest_check”: false, “connection”: { “user”: “root” } } } } }

In some example embodiments, the information technology infrastructurecontroller 110 may be configured to generate, based at least on thefirst configuration file 125 a and/or the second configuration file 125b, an execution plan for applying, to the information technologyinfrastructure 130, the one or more configurations specified in thefirst configuration file 125 a and/or the second configuration file 125b. For example, the first configuration file 125 a and/or the secondconfiguration file 125 b may be sent to the version controller 140before being transferred to the information technology infrastructurecontroller 110. The version controller 140 may be configured to manageand/or reconcile different versions of the first configuration file 125a and/or the second configuration file 125 b. It should be appreciatedthat the version controller 140 may be any version control system,revision control system, and/or source control system capable oftracking and managing changes made to a configuration file by one ormore users. For instance, the version controller 140 may be Github,Github Enterprise, GitLab, GitLab EE and CE, Bitbucket Cloud, BitbucketServer, and/or the like. Alternatively and/or additionally, the versioncontroller 140 may be the private and/or proprietary version controlsystem implemented for exclusive use by an enterprise.

FIG. 1B depicts a block diagram illustrating the information technologyinfrastructure controller 110, in accordance with some exampleembodiments. Referring to FIGS. 1A-B, the information technologyinfrastructure controller 110 may include a plan engine 160, avalidation engine 170, and a state controller 180. As shown in FIG. 1B,in some example embodiments, the information technology infrastructurecontroller 110 may be configured to generate an execution plan 190 forapplying, to the first information technology infrastructure 130 a, oneor more configurations specified, for example, in the firstconfiguration file 125 a and/or the second configuration file 125 b.

Referring again to FIG. 1B, the plan engine 160 may include one or moreworkspaces including, for example, a first workspace 165 a, a secondworkspace 165 b, and a third workspace 165 c. Each of the firstworkspace 165 a, the second workspace 165 b, and the third workspace 165c may be configured to maintain the configurations for at least aportion of the first information technology infrastructure 130 a.Alternatively, the first workspace 165 a, the second workspace 165 b,and/or the third workspace 165 c may be configured to maintainconfigurations for different information technology infrastructures,each of which associated with a different organization. For instance,the first workspace 165 a may maintain the configurations for at least aportion of the first information technology infrastructure 130 aassociated with one organization while the second workspace 165 b maymaintain the configurations for at least a portion of the secondinformation technology infrastructure 130 b associated with a differentorganization. When the first configuration file 125 a and/or the secondconfiguration filed 125 b are pushed and/or pulled from the versioncontroller 140, the plan engine 160 may merge the first configurationfile 125 a and/or the second configuration file 125 b into the firstworkspace 165 a, the second workspace 165 b, and/or the third workspace165 c.

In some example embodiments, the first workspace 165 a, the secondworkspace 165 b, and the third workspace 165 c may each maintain adifferent iteration of configurations for at least a portion of thefirst information technology infrastructure 130 a. For example, thefirst workspace 165 a, the second workspace 165 b, and the thirdworkspace 165 c may each maintain the configurations that are applied tothe first information technology infrastructure 130 a in order toconfigure the first information technology infrastructure 130 a tosupport a production environment, a staging environment, and adevelopment environment for a software application. Accordingly, thefirst workspace 165 a may maintain the configurations associated with aproduction environment, the second workspace 165 b may maintain theconfigurations associated with a staging environment, and the thirdworkspace 165 c may maintain the configurations associated with adevelopment environment.

Alternatively and/or additionally, each of the first workspace 165 a,the second workspace 165 b, and the third workspace 165 c may beassociated with the configurations for a specific portion the firstinformation technology infrastructure 130 a. For examples, the firstworkspace 165 a may maintain the configurations for to the hardwareresources 135 a of the first information technology infrastructure 130a, the second workspace 165 b may maintain the configurations for thesoftware resources 135 b of the first information technologyinfrastructure 130 a, and the third workspace 165 c may maintain theconfigurations for the network resources 135 c of the first informationtechnology infrastructure 130 a.

In some example embodiments, the first workspace 165 a, the secondworkspace 165 b, and the third workspace 165 c may each be associatedwith a different set of variables. Each set of variables may correspondto a different iteration of configurations for the first informationtechnology infrastructure 130 a (e.g., production environment, stagingenvironment, development environment, and/or the like). Alternativelyand/or additionally, each set of variables may correspond to theconfigurations for a different portion of the first informationtechnology infrastructure 130 a (e.g., the hardware resources 135 a, thesoftware resources 135 b, the network resources 135 c, and/or the like).At least some of these variables may be set and/or modified by themerging of the first configuration file 125 a and/or the secondconfiguration file 125 b into the first workspace 165 a, the secondworkspace 165 b, and the third workspace 165 c.

The first workspace 165 a, the second workspace 165 b, and the thirdworkspace 165 c may be associated with one or more organizationsincluding, for example, the organization 155. However, as noted, thefirst workspace 165 a, the second workspace 165 b, and the thirdworkspace 165 c may be associated with multiple organizations, each ofwhich having a distinct information technology infrastructure. Moreover,the first workspace 165 a, the second workspace 165 b, and the thirdworkspace 165 c may each be associated with a team of one or more usersfrom the organization 155. For example, the first workspace 165 a may beassociated with a first team of users that includes the first user 145 aat the first client 120 a while the second workspace 165 b may beassociated with a second team of users that includes the second user 145b at the second client 120 b. Each team of users may be accordedexclusive access to the corresponding workspace. Moreover, differentusers within a team of users may afforded different access privilegeswith respect to a corresponding workspace. For example, the first user145 a may be provided read access, write access, and/or administrativeaccess to the first workspace 165 a while the second user 145 b may beprovided read access, write access, and/or administrative access to thesecond workspace 165 b. However, the first user 145 a may be preventedfrom accessing the second workspace 165 b if the first user 145 is not amember of the second team of user having exclusive access to the secondworkspace 165 b. Likewise, the second user 145 b may be prevented fromaccessing the first workspace 165 a if the second user 145 b is not amember of the first team of users having exclusive access to the firstworkspace 165 a.

In some example embodiments, the first user 145 a may access the firstworkspace 165 a by at least merging the first configuration file 125 ainto the first workspace 165 a. For example, the information technologyinfrastructure controller 110 may register, at the version controller140, a webhook. The webhook may be a hypertext transfer protocol (HTTP)callback configured to post, to the information technologyinfrastructure controller 110, a notification when the first user 145 acommits the first configuration file 125 a at the version controller140. Meanwhile, the information technology infrastructure controller 110may respond to the notification by at least pulling the firstconfiguration file 125 a from the version controller 140 and merging ofthe first configuration file 125 a into the first workspace 165 a.

As noted, merging the first configuration file 125 a into the firstworkspace 165 a may set and/or modify at least some of the variablesassociated with the first workspace 165 a. Moreover, by merging thefirst configuration file 125 a into the first workspace 165 a, the firstuser 145 a may modify the configurations specified for at least aportion of the first information technology infrastructure 130 a. Forinstance, merging the first configuration file 125 a into the firstworkspace 165 a may modify the configurations specified for the hardwareresources 135 a of the first information technology infrastructure 130 ain order to provide a production environment for a software application.According to some example embodiments, two or more of the firstworkspace 165 a, the second workspace 165 b, and/or the third workspace165 c may be linked such that updating a variable in one workspace maytrigger an update to the same variable at the linked workspaces.

Alternatively and/or additionally, the second user 145 b may access thesecond workspace 165 b by at least merging the second configuration file125 b into the second workspace 165 b. The information technologyinfrastructure controller 110 may pull, from the version controller 140,the second configuration file 125 b in response to a notification fromthe webhook at the version controller 140. Merging the secondconfiguration file 125 b into the second workspace 165 b may modify theconfigurations specified for at least a portion of the first informationtechnology infrastructure 130 a by at least setting and/or modifying atleast some of the variables associated with the second workspace 165 b.For example, merging the second configuration file 125 b into the secondworkspace 165 b may modify the configurations specified for to thesoftware resources 135 b of the first information technologyinfrastructure 130 a in order to provide a staging environment for asoftware application.

The information technology infrastructure controller 110 may generate,based at least on the configurations associated with the first workspace165 a, the second workspace 165 b, and/or the third workspace 165 c, theexecution plan 190. The execution plan 190 may include one or moreoperations to provision, modify, and/or de-provision resources at thefirst information technology infrastructure 130 a in order to apply, tothe first information technology infrastructure 130 a, theconfigurations associated with the first workspace 165 a, the secondworkspace 165 b, and/or the third workspace 165 c.

In some example embodiments, the information technology infrastructurecontroller 110 may generate the execution plan 190 by at leastconsolidating the configurations associated with the first workspace 165a, the second workspace 165 b, and the third workspace 165 c. That is,the execution plan 190 may be generated to achieve a combination of thedifferent iterations of the configurations for the first informationtechnology infrastructure 130 a and/or the configurations for differentportions of the first information technology infrastructure 130 a.Alternatively and/or additionally, the information technologyinfrastructure controller 110 may generate the execution plan 190 basedon some but not all of the configurations associated with the firstworkspace 165 a, the second workspace 165 b, and/or the third workspace165 c. For example, the execution plan 190 may be generated to achieveonly some iterations of the configurations for the first informationtechnology infrastructure 130 a and/or the configurations for only aportion of the first information technology infrastructure 130 a.

In some example embodiments, the first workspace 165 a, the secondworkspace 165 b, and/or the third workspace 165 c may be marked forautomatic destruction. For example, the first workspace 165 a, thesecond workspace 165 b, and/or the third workspace 165 c may persist fora period of time (e.g., 24 hours), after which the informationtechnology infrastructure controller 110 may be configured toautomatically destroy the first workspace 165 a, the second workspace165 b, and/or the third workspace 165 c. The first workspace 165 a, thesecond workspace 165 b, and/or the third workspace 165 c may bepersisted for a limited period of time in order to configure the firstinformation technology infrastructure 130 a to provide a temporaryenvironment or disposable environment (e.g., a demo environment).

The information technology infrastructure controller 110 may generatethe execution plan 190 including by creating a corresponding dependencygraph (e.g., a directed acyclic graph (DAG) and/or the like) having aplurality of nodes, at least some of which being interconnected byinterconnected by one or more directed edges. FIG. 2 depicts an exampleof a dependency graph 200, in accordance with some example embodiments.

To apply the configurations associated with the execution plan 190 tothe first information technology infrastructure 130 a, the informationtechnology infrastructure controller 110 may traverse the correspondingdependency graph. For instance, the information technologyinfrastructure controller 110 may perform a depth-first traversal of thedependency graph in order to determine the resources that the executionplan 190 indicates as requiring provisioning, modification, and/orde-provisioning. The information technology infrastructure controller110 may further identify, based on the dependency graph, independentresources that may be provisioned, modified, and/or de-provisioned inparallel. It should be appreciated that the information technologyinfrastructure controller 110 may be configured to maximizeparallelization when applying, to the first information technologyinfrastructure 130 a, the configurations associated with the executionplan 190.

Table 3 below depicts examples of nodes that may be present in thedependency graph corresponding to the execution plan 190.

TABLE 3 Type of Node Description Resource Node Representative of asingle resource such as, for example, a hardware resource, a softwareresource, a network resource, and/or the like. Provider NodeRepresentative of a provider of one or more resources including, forexample, hardware resources, software resources, network resources,and/or the like. Each provider node may include the time required tofully configure a corresponding provider to provide the correspondingresources. Resource Meta Node Representative of a group of resourcesincluding, for example, one or more hardware resources, softwareresources, network resources, and/or the like. Data Node Representativeof data needing to be fetched, retrieved, and/or generated for purposesof configuring other resources and/or providers.

The information technology infrastructure controller 110 may generatethe dependency graph by at least adding, to the dependency graph, one ormore resource nodes corresponding to individual resources including, forexample, one or more hardware resources 135 a, software resources 135 b,network resources 135 c, and/or the like. The one or more resource nodesmay be mapped to the corresponding provider nodes, for example, toidentify the first provider 150 a and/or the second provider 150 b asbeing the provider of the resources associated with each of the resourcenodes. Moreover, the information technology infrastructure controller110 may generate the dependency graph by at least inserting one or moreedges to interconnect, for example, the resource nodes and the providernodes. An edge interconnecting a resource node to a provider node mayidentify the provider associated with the provider node as being aprovider of the resource associated with the resource node. Meanwhile,an edge interconnecting two resource nodes may indicate a dependencybetween the resources associated with the two resource nodes.

To represent resources that require de-provisioning, the dependencygraph may include one or more “orphan” resource nodes, which may bedisconnected from the provider nodes and other resource nodes in thedependency graph. Alternatively and/or additionally, in order torepresent the modification of an existing resource within the firstinformation technology infrastructure 130 a, the information technologyinfrastructure controller 110 may generate the dependency graph by atleast splitting the corresponding resource node into a first resourcenode and a second resource node. The first resource node may correspondto the existing resource, which may be de-provisioned when theconfigurations specified in the execution plan 190 are applied to thefirst information technology infrastructure 130 a. Meanwhile, the secondresource node may correspond to the modified resource, which may beprovisioned when the configurations specified in the execution plan 190are applied to the first information technology infrastructure 130 a.

Referring again to FIG. 1B, the validation engine 170 may be configuredto validate the execution plan 190 before the information technologyinfrastructure controller 110 applies the corresponding configurationsto the information technology infrastructure 130. In some exampleembodiments, the validation engine 170 may be configured to perform amultitier validation of the execution plan 190 in order to determinewhether the configurations associated with the execution plan 190satisfy one or more requirements including, for example, validconfigurations, proper permissions, cost compliance, and/or the like.

For instance, the validation engine 170 may perform a first tier ofvalidation by at least determining the structural validity of theconfigurations associated with the execution plan 190 including, forexample, the syntactic validity and/or semantic validity of theconfigurations associated with the execution plan 190. If theconfigurations associated with the execution plan 190 successfullypasses the first tier of validation, the validation engine 170 mayperform a second tier of validation by at least determining whether theconfigurations comply with one or more policies including, for example,a first policy 175 a, a second policy 175 b, and/or the like. The firstpolicy 175 a and/or the second policy 175 b may impose limitations onthe resources allocated by the configurations associated with theexecution plan 190. Upon determining that the configurations associatedwith the execution plan 190 comply with the one or more policies, thevalidation engine 170 may perform a third tier of validation by at leastdetermining whether the configurations associated with the executionplan 190 meet one or more cost quotas including, for example, a firstquota 175 c, a second quota 175 d, and/or the like. The first quota 175c and/or the second quota 175 d may impose target values and/or limitson the projected costs of the configurations associated with theexecution plan 190.

In some example embodiments, a programming code based representation ofthe first policy 175 a, the second policy 175 b, the first quota 175 c,and/or the second quota 175 d may be used to provide the first policy175 a, the second policy 175 b, the first quota 175 c, and/or the secondquota 175 d to the validation engine 170. Furthermore, the first policy175 a, the second policy 175 b, the first quota 175 c, and/or the secondquota 175 d may be input by the first user 145 a at the first client 120a and/or the second user 145 b at the second client 120 b. Alternativelyand/or additionally, the first policy 175 a, the second policy 175 b,the first quota 175 c, and/or the second quota 175 d may be retrievedfrom a repository such as, for example, the version controller 140and/or the like.

In some example embodiments, the first policy 175 a, the second policy175 b, the first quota 175 c, and/or the second quota 175 d may becustom configured, for example, by the first user 145 a and/or thesecond user 145 b based at least on the first user 145 a and/or thesecond user 145 b having the necessary access privileges (e.g.,administrative access and/or the like) for setting and/or modifying apolicy at the validation engine 170. Moreover, the first policy 175 a,the second policy 175 b, the first quota 175 c, and/or the second quota175 d may be custom configured to have limited applicability. Forexample, each of the first workspace 165 a, the second workspace 165 b,and the third workspace 165 c may be associated with attributesincluding, for example, environment, application type, region, cloud,and/or the like. Whether a policy or a cost quota is applicable to eachof the first workspace 165 a, the second workspace 165 b, and/or thethird workspace 165 c may be determined based on the correspondingattributes. That is, the validation engine 170 may identify the policiesand/or cost quotas that are applicable to a workspace by at leastfiltering a broader set of policies and/or cost quotas based on theattributes of the workspace.

Accordingly, the first policy 175 a and/or the first quota 175 c may beconfigured to apply only to configurations associated with a stagingenvironment while the second policy 175 b and/or the second quota 175 dmay be configured to apply only to configurations associated with aproduction environment. Alternatively and/or additionally, the firstpolicy 175 a and/or the first quota 175 c may be configured to applyonly to configurations associated with one portion of the firstinformation technology infrastructure 130 a (e.g., the hardwareresources 135 a) while the second policy 175 b and/or the second quota175 d may be configured to apply only to configurations associated witha different portion of the first information technology infrastructure130 a (e.g., the network resources 135 c). In some example embodiments,the execution plan 190 may be validated against requirements that areclassified as advisory, mandatory, and/or semi-mandatory. For example,the first policy 175 a, the second policy 175 b, the first quota 175 c,and/or the second quota 175 d may be classified as advisory, mandatory,and/or semi-mandatory. Applying a requirement that is classified asadvisory may merely trigger a notification (e.g., an informative outputdisplayed at the first client 120 a and/or the second client 120 b)indicative, for example, of the configurations associated with theexecution plan 190 as failing to comply with the requirement. Bycontrast, applying a requirement that is classified as mandatory and/orsemi-mandatory may prevent the configurations associated with theexecution plan 190 from being applied at the first informationtechnology infrastructure 130 a in the event the configurations fail tosatisfy the requirement. Moreover, while advisory requirements andsemi-mandatory requirements may be overridden, a mandatory requirementmust be satisfied before the configurations associated with theexecution plan 190 may be applied at the first information technologyinfrastructure 130 a.

In some example embodiments, the first policy 175 a, the validationengine 170 may invoke an externally configured service in order toverify whether the execution plan 190 satisfies one or more externallyconfigured policies and/or quotas. For example, the first policy 175 a,the second policy 175 b, the first quota 175 c, and/or the second quota175 d may be configured externally by a web hook mechanism. The resultof the external validation (e.g., a pass and/or fail status) may bereturned to the validation engine 170 via an application programminginterface (API). The one or more externally configured policies and/orquotas may also be classified as advisory, mandatory, and/orsemi-mandatory. Accordingly, failure of an external policy and/or quotaclassified as mandatory and/or semi-mandatory may prevent the executionplan 190 from being applied at the first information technologyinfrastructure 130 a. Contrastingly, failure of an external policyand/or quota classified as advisory may trigger instead a notification(e.g., an informative output displayed at the first client 120 a and/orthe second client 120 b) indicative, for example, of the configurationsassociated with the execution plan 190 as being non-compliant.

The information technology infrastructure controller 110 may apply, tothe information technology infrastructure 130, the configurationsassociated with the first workspace 165 a, the second workspace 165 b,and/or the third workspace 165 c by at least performing the operationsincluded in the execution plan 190, for example, to provision, modify,and/or de-provision one or more resources at the first informationtechnology infrastructure 130 a. According to some example embodiments,the information technology infrastructure controller 110 may beconfigured to implement the execution plan 190 based at least on theexecution plan 190 having been successfully validated by the validationengine 170. The validation engine 170 may be configured to provide anindication of the execution plan 190 as having been successfully orunsuccessfully validated by the validation engine 170. Alternativelyand/or additionally, the validation engine 170 may provide an indicationof the execution plan 190 as having passed or failed each of the firstpolicy 175 a, the second policy 175 b, the first quota 175 c, the secondquota 175 d, and/or the like. As noted, one or more of the first policy175 a, the second policy 175 b, the first quota 175 c, and/or the secondquota 175 d may be classified as advisory and/or semi-mandatory. Thesepolicies and/or quotas may be overridden and/or excluded from thevalidation of the execution plan 190. Alternatively, one or more of thefirst policy 175 a, the second policy 175 b, the first quota 175 c,and/or the second quota 175 d may be classified as mandatory. Mandatorypolicies and/or quotas may not be overridden and/or excluded from thevalidation of the execution plan 190. Instead, the configurationsassociated with the execution plan 190 may be required to satisfy allmandatory policies and/or quotas before the configurations may beapplied at the first information technology infrastructure 130 a.

In some example embodiments, instead of and/or in addition to theinformation technology infrastructure controller 110 ingesting, from theversion controller 140, the first configuration file 125 a and/or thesecond configuration file 125 b before merging the first configurationfile 125 a and/or the second configuration file 125 b into the firstworkspace 165 a, the second workspace 165 b, and/or the third workspace165 c to generate the execution plan 190, the first user 145 a at thefirst client 120 a and/or the second user 145 b at the second client 120b may upload the execution plan 190 directly to the informationtechnology infrastructure controller 110, for example, via anapplication programming interface (API). Furthermore, the first user 145a at the first client 120 a and/or the second user 145 b at the secondclient 120 b may remotely execute the execution plan 190, for example,to provision, modify, and/or de-provision resources in the firstinformation technology infrastructure 130 a.

In some example embodiments, the state controller 180 may be configuredto track the changes that are applied to the configurations of the firstinformation technology infrastructure 130 a. For example, the statecontroller 180 may generate and store a state file prior to implementingan execution plan such as, for example, the execution plan 190. Thestate file may capture a current state at the first informationtechnology infrastructure 130 a, including one or more existingconfigurations at the first information technology infrastructure 130 a,prior to the application of the configurations associated with theexecution plan 190. The information technology infrastructure controller110 may determine, based on one or more state files generated and storedby the state controller 180, a previous state of the first informationtechnology infrastructure 130 a including, for example, one or moreprevious configurations at the first information technologyinfrastructure 130 a. Alternatively and/or additionally, the informationtechnology infrastructure controller 110 may restore, based at on theone or more state files generated and stored by the state controller180, the first information technology infrastructure 130 a to a previousstate.

For instance, as FIG. 1B shows, the state controller 180 may generateand store a plurality of state files including, for example, a firststate file 185 a, a second state file 185 b, and/or the like. The firststate file 185 a and the second state file 185 b may capture successivestates of the first information technology infrastructure 130 a. Forexample, the first state file 185 a may capture the configurations atthe first information technology infrastructure 130 a at a first time t₁prior to the implementation of a first execution plan while the secondstate file 185 b may capture the configurations at the first informationtechnology infrastructure 130 a at a second time t₂ prior to theimplementation of a second execution plan. The information technologyinfrastructure controller 110 may generate, based at least on the firststate file 185 a and the second state file 185 b, a delta file or adifference file showing the difference between the configurations at thefirst information technology infrastructure 130 a at the first time t₁and the configurations at the first information technologyinfrastructure 130 a at the second time t₂.

Moreover, the information technology infrastructure controller 110 mayrestore, based at least on the first state file 185 a, the firstinformation technology infrastructure 130 a to a state at the first timet₁. Alternatively and/or additionally, the information technologyinfrastructure controller 110 may restore, based at least on the secondstate file 185 b, the first information technology infrastructure 130 ato a state at the second time t₂. It should be appreciated that byrestoring the first information technology infrastructure 130 a to anearlier state, the information technology infrastructure controller 110may reverse subsequent changes to the configurations of the firstinformation technology infrastructure 130 a.

Table 4 below depicts an example of a state file. As Table 4 shows, thestate controller 180 may generate, prior to implementing an executionplan, a state file to capture a current state of the first informationtechnology infrastructure 130 a, including one or more existingconfigurations at the first information technology infrastructure 130 a.

TABLE 4 aws_instance.example: id = i-32cf65a8 ami = ami-2757f631availability_zone = us-east-1a instance_state = running instance_type =t2.micro private_ip = 172.31.30.244 public_dns =ec2-52-90-212-55.compute-1.amazonaws.com public_ip = 52.90.212.55subnet_id = subnet-1497024d vpc_security_group_ids.# = 1vpc_security_group_ids.3348721628 = sg-67672003

Referring again to FIG. 1B, the state controller 180 may also maintain arun log 187 tracking, for example, various runs of one or more executionplans including, for example, the execution plan 190. As used herein,“running” the execution plan 190 may include generating the executionplan 190, validating the execution plan 190, applying the configurationsassociated with the execution plan 190, canceling the execution plan190, discarding the execution plan 190, and/or the like. Accordingly,each run of an execution plan may be associated with a run statusincluding, for example, planning, planned, error, confirmed, applying,applied, canceled, discarded, pending, policy checking, policy checked,policy override, and/or the like. The run log 187 may be configured totrack the runs of one or more execution plan including, for example, bystoring a corresponding run status for each of the runs.

In some example embodiments, the state controller 180 may maintain statefiles and run logs for each individual workspace. For example, the firststate file 185 a, the second state file 185 b, and the run log 187 maybe associated with the first workspace 165 a while the state controller180 may maintain additional state files and run logs for the otherworkspaces including, for example, the second workspace 165 b, the thirdworkspace 165 c, and/or the like. However, it should be appreciated thatthe first state file 185 a, the second state file 185 b, and the run log187 may be associated with the first information technologyinfrastructure 130 a as a whole instead of any individual workspaceassociated with the first information technology infrastructure 130 a.

FIG. 1C depicts a block diagram illustrating a module registry 115, inaccordance with some example embodiments. Referring to FIGS. 1A-C, themodule registry 115 may include a plurality of infrastructure modulesincluding, for example, a first module 116 a, a second module 116 b,and/or the like. The first module 116 a and the second module 116 b mayeach include the configurations that may be applied to an informationtechnology infrastructure (e.g., the first information technologyinfrastructure 130 a, the second information technology infrastructure130 b, and/or the like) to achieve, at least partially, an informationtechnology objective such as, for example, support for a softwareapplication, a multi-tier software application, self-service clusters,software demonstrations, disposable environments (e.g., productionenvironments, staging environments, and/or the like), software definednetworking, resource schedulers, multi-cloud deployment, and/or thelike.

Referring again to FIG. 1C, the first user 145 a may create the firstmodule 116 a and/or the second module 116 b while creating the firstconfiguration file 125 a at the first client 120 a. The first user 145 amay publish the first module 116 a and/or the second module 116 b suchthat the second user 145 b may add, to the second configuration file 125b, the first module 116 a and/or the second module 116 b while thesecond user 145 b is creating the second configuration file 125 b at thesecond client 120 b. Adding the first module 116 a and/or the secondmodule 116 b to the second configuration file 125 b may incorporate,into the second configuration file 125 b, the configurations included infirst module 116 a and/or the second module 116 b. For example, thefirst module 116 a and/or the second module 116 b may include theprovisioning, modification, and/or de-provisioning of one or more of thehardware resources 135 a, the software resources 135 b, and/or thenetwork resources 135 c at the first information technologyinfrastructure 130 a to support the deployment, testing, and/ormaintenance of a software application. Accordingly, adding to the firstmodule 116 a and/or the second module 116 b to the second configurationfile 125 b may incorporate, into the second configuration file 125 b,the provisioning, modification, and/or de-provisioning of the sameresources, for example, at a different information technologyinfrastructure such as the second information technology infrastructure130 b.

In some example embodiments, the first module 116 a and/or the secondmodule 116 b may be published directly to the module registry 115 byadding, to the module registry 115, a version of the first module 116 aand/or the second module 116 b. Alternatively and/or additionally, thefirst module 116 a and/or the second module 116 b may be published viathe version controller 140. Publishing the first module 116 a and/or thesecond module 116 b via the version controller 140 may includeregistering, at the version controller 140, a webhook (e.g., a hypertexttransfer protocol (HTTP) callback) configured to post, to theinformation technology infrastructure controller 110, a notificationwhenever a different version of the first module 116 a and/or the secondmodule 116 b is committed to the version controller 140. Accordingly,instead of storing static versions of the first module 116 a and/or thesecond module 116 b, the information technology infrastructurecontroller 110 may update the module registry 115 whenever, for example,the first user 145 a creates another version of the first module 116 aand/or the second module 116 b. In doing so, the second user 145 b mayhave access to multiple versions of the first module 116 a and/or thesecond module 116 b including, for example, the most recent versions ofthe first module 116 a and/or the second module 116 b, when creating thesecond configuration file 125 b.

In some example embodiments, the module registry 115 may be associatedwith the organization 155 such that only users from the organization 155(e.g., the first user 145 a at the first client 120 a and/or the seconduser 145 b at the second client 120 b) may have access to the moduleregistry 115, for example, to publish modules, consume modules, and/orthe like. For example, the first user 145 a may publish the first module116 a and/or the second module 116 b to the module registry 115 and thesecond user 145 b may consume the first module 116 a and/or the secondmodule 116 b from the module registry 115 based at least on the firstuser 145 a and the second user 145 b being associated with theorganization 155. A user who is not associated with the organization 155may be prevented from accessing the module registry 115. That is, a userwho is not associated with the organization 155 may neither publish norconsume an infrastructure module from the module registry 115.

Table 5 below depicts programming code for an example of a module named“consul.” This module may be sourced from a public registry, a privateregistry, and/or version control system. In some example embodiments,the module may be associated with a version constraint to ensure that aspecific version of the module is fetched from the public registry,private registry, and/or version control system. The module may requireadditional configuration such as, for example, the quantity of servers.These additional configurations may be optional in some instances andmandatory in others.

TABLE 5 module “consul” { source = “hashicorp/consul/aws” version − “~>0.0.5” servers = 3 } resource “aws_instance” “client” { ami = “ami −408c7f28” instance_type = “t1.micro” availability_zone =“${module.consul.server_availability_zone}” }

FIG. 3A depicts a flowchart illustrating a process 300 for managing theinformation technology infrastructure 130, in accordance with someexample embodiments. Referring to FIGS. 1A-C, 2, and 3A, the process 300may be performed by the information technology infrastructure controller110 to manage an information technology infrastructure such as, forexample, the first information technology infrastructure 130 a. Forexample, the management of the first information technologyinfrastructure 130 a may include the provisioning, modification, and/orde-provisioning of one or more of the hardware resources 135 a, thesoftware resources 135 b, and/or the network resources 135 c to achievean information technology objective such as, for example, support for asoftware application, a multi-tier software application, self-serviceclusters, software demonstrations, disposable environments (e.g.,production environments, staging environments, and/or the like),software defined networking, resource schedulers, multi-clouddeployment, and/or the like. Nevertheless, it should be appreciated thatthe information technology infrastructure controller 110 may alsoperform the process 300 to manage other information technologyinfrastructures including, for example, the second informationtechnology infrastructure 130 b and/or the like.

The information technology infrastructure controller 110 may generate afirst workspace configured to maintain a first set of configurations forthe first information technology infrastructure 130 a (302).Furthermore, the information technology infrastructure controller 110may generate a second workspace configured to maintain a second set ofconfigurations for the first information technology infrastructure 130 a(304). In some example embodiments, the information technologyinfrastructure controller 110, for example, the plan engine 160, maygenerate the first workspace 165 a, the second workspace 165 b, and/orthe third workspace 165 c. The first workspace 165 a, the secondworkspace 165 b, and the third workspace 165 c may each maintain adifferent iteration of configurations for at least a portion of thefirst information technology infrastructure 130 a. For example, thefirst workspace 165 a, the second workspace 165 b, and the thirdworkspace 165 c may each maintain the configurations that are applied tothe first information technology infrastructure 130 a in order toconfigure the first information technology infrastructure 130 a tosupport a production environment, a staging environment, and adevelopment environment for a software application.

Alternatively and/or additionally, each of the first workspace 165 a,the second workspace 165 b, and the third workspace 165 c may beassociated with the configurations for a specific portion the firstinformation technology infrastructure 130 a. For instance, the firstworkspace 165 a may maintain the configurations for to the hardwareresources 135 a of the first information technology infrastructure 130a, the second workspace 165 b may maintain the configurations for thesoftware resources 135 b of the first information technologyinfrastructure 130 a, and the third workspace 165 c may maintain theconfigurations for the network resources 135 c of the first informationtechnology infrastructure 130 a. As noted, different workspaces may alsobe generated to maintain configurations for different informationtechnology infrastructures. For example, the first workspace 165 a maybe associated with configurations for at least a portion of the firstinformation technology infrastructure 130 a while the second workspace165 b may be associated with configurations for at least a portion ofthe second information technology infrastructure 130 b.

The information technology infrastructure controller 110 may merge, intothe first workspace and/or the second workspace, a configuration filespecifying one or more configurations to apply to the first informationtechnology infrastructure 130 a (306). In some example embodiments, theinformation technology infrastructure controller 110 may register, atthe version controller 140, a webhook (e.g., a hypertext transferprotocol (HTTP) callback) configured to post, to the informationtechnology infrastructure controller 110, a notification the firstconfiguration file 125 a and/or the second configuration file 125 b arecommitted at the version controller 140. The information technologyinfrastructure controller 110 may respond to the notification from thewebhook at the version controller 140 by at least pulling the firstconfiguration file 125 a and/or the second configuration file 125 b fromthe version controller 140. Furthermore, the information technologyinfrastructure controller 110 may merge the first configuration file 125a into the first workspace 165 a and the second configuration file 125 binto the second workspace 165 b. As noted, merging the firstconfiguration file 125 a into the first workspace 165 a may set and/ormodify at least some of the variables associated with the firstworkspace 165 a, for example, to modify the configurations specified forthe hardware resources 135 a of the first information technologyinfrastructure 130 a. Meanwhile, merging the second configuration file125 b into the second workspace 165 b may set and/or modify at leastsome of the variables associated with the second workspace 165 b, forexample, to modify the configurations specified for the softwareresources 135 b of the first information technology infrastructure 130a.

The information technology infrastructure controller 110 may generate,based at least on the first workspace and/or the second workspace, anexecution plan that includes one or more operations to apply, to thefirst information technology infrastructure 130 a, the one or moreconfigurations specified in the configuration file (308). In someexample embodiments, the information technology infrastructurecontroller 110 may generate the execution plan 190 by at leastconsolidating the configurations associated with the first workspace 165a, the second workspace 165 b, and the third workspace 165 c.Alternatively and/or additionally, the information technologyinfrastructure controller 110 may generate the execution plan 190 basedon some but not all of the configurations associated with the firstworkspace 165 a, the second workspace 165 b, and/or the third workspace165 c.

The information technology infrastructure controller 110 may apply,based at least on the execution plan, the one or more configurationsincluding by at least provisioning, modifying, and/or de-provisioningone or more resources at the first information technology infrastructure130 a (310). In some example embodiments, to apply the configurationsassociated with the execution plan 190 to the first informationtechnology infrastructure 130 a, the information technologyinfrastructure controller 110 may generate and traverse a correspondingdependency graph. For example, the information technology infrastructurecontroller 110 may generate the dependency graph 200, which may includea plurality of resource nodes and provider nodes, at least some of whichbeing interconnected by one or more directed edges. The informationtechnology infrastructure controller 110 may traverse the dependencygraph 200 to at least identify independent resources that may beprovisioned, modified, and/or de-provisioned in parallel. As noted, theinformation technology infrastructure controller 110 may be configuredto maximize parallelization when applying, to the first informationtechnology infrastructure 130 a, the configurations associated with theexecution plan 190.

FIG. 3B depicts a flowchart illustrating a process 320 for running anexecution plan, in accordance with some example embodiments. Referringto FIGS. 1A-C, 2, and 3B, the process 320 may be performed by theinformation technology infrastructure controller 110, for example, toperform a multitier validation of the execution plan 190 before theconfigurations associated with the execution plan 190 are applied to thefirst information technology infrastructure 130 a. As noted, theexecution plan 190 may include one or more operations, which may beapplied to the first information technology infrastructure 130 a inorder to realize one or more configurations for achieving an informationtechnology objective such as, for example, support for a softwareapplication, a multi-tier software application, self-service clusters,software demonstrations, disposable environments (e.g., productionenvironments, staging environments, and/or the like), software definednetworking, resource schedulers, multi-cloud deployment, and/or thelike. The multitier validation of the execution plan 190 may includedetermining whether the configurations associated with the executionplan 190 satisfy one or more requirements including, for example,advisory, mandatory, and/or semi-mandatory requirements.

The information technology infrastructure controller 110 may perform afirst tier validation of the execution plan 190 by at least determininga structural validity of one or more configurations associated with theexecution plan 190 (322). In some example embodiments, the informationtechnology infrastructure controller 110, for example, the validationengine 170, may determine whether the configurations associated with theexecution plan 190 are free from syntactic errors (e.g., typographicalerrors, syntax errors, formatting errors, and/or the like) and/orsemantic errors that would prevent the configurations from beingprocessed. For example, the information technology infrastructurecontroller 110 may detect a syntactic error if the configurationsassociated with the execution plan 190 requests a negative quantity ofresources and/or if the quantity of resources are defined using a stringvalue instead of a numeric value. Alternatively and/or additionally, theinformation technology infrastructure controller 110 may detect asemantic error if a mismatch in dependent resources is present in theconfigurations associated with the execution plan 190.

The information technology infrastructure controller 110 may determinethat the configurations associated with the execution plan 190 arestructurally valid (323-Y). Accordingly, the information technologyinfrastructure controller 110 may perform a second tier validation ofthe execution plan 190 by at least determining whether the one or moreconfigurations associated with the execution plan 190 comply with atleast one policy (424). For example, in some example embodiments, theinformation technology infrastructure controller 110, for example, thevalidation engine 170, may further validate the execution plan 190 by atleast determining whether the first information technologyinfrastructure 130 a would satisfy the requirements imposed by the firstpolicy 175 a and/or the second policy 175 b if the configurationsassociated with the execution plan 190 are applied to the firstinformation technology infrastructure 130 a. The first policy 175 aand/or the second policy 175 b may each impose one or more limitationson the resources allocated for the first information technologyinfrastructure 130 a. For instance, the first policy 175 a may impose amaximum and/or a minimum on a quantity of a resource allocated for thefirst information technology infrastructure 130 a. Meanwhile, the secondpolicy 175 b may specify that an X instance type may only be builtduring a Y period in a Z region of the first information technologyinfrastructure 130 a.

The information technology infrastructure controller 110 may determinethat the configurations associated with the execution plan 190 complywith the at least one policy (325-Y). As such, the informationtechnology infrastructure controller 110 may perform a third tiervalidation of the execution plan 190 by at least determining whether theone or more configurations of the execution plan 190 meet at least onecost quota (326). In some example embodiments, the informationtechnology infrastructure controller 110, for example, the validationengine 170, may further validate the execution plan 190 by at leastdetermining whether the first information technology infrastructure 130a would satisfy the requirements imposed by the first quota 175 c and/orthe second quota 175 d if the configurations associated with theexecution plan 190 are applied to the first information technologyinfrastructure 130 a. The first quota 175 c and/or the second quota 175d may impose limitations of the projected costs of the configurationsassociated with the execution plan 190. Accordingly, the informationtechnology infrastructure controller 110 may determine whether the firstinformation technology infrastructure 130 a would exceed theselimitations on projected costs if the configurations associated with theexecution plan 190 are applied to the first information technologyinfrastructure 130 a.

The information technology infrastructure controller 110 may determinethat the configurations associated with the execution plan 190 meet theat least one cost quota (327-Y). As such, the information technologyinfrastructure controller 110 may apply, to the first informationtechnology infrastructure 130 a, the one or more configurationsassociated with the execution plan 190 (328). For example, theinformation technology infrastructure controller 110 may implement theexecution plan 190 based at least on the configurations associated withthe execution plan 190 having successfully passed the multitiervalidation. Implementing the execution plan 190 may include applying, tothe first information technology infrastructure 130 a, theconfigurations associated with the execution plan 190. For example,applying, to the first information technology infrastructure 130 a, theconfigurations associated with the execution plan 190 may includeprovisioning, modifying, and/or de-provisioning one or more of thehardware resources 135 a, software resources 135 b, and/or networkresources 135 c associated with the information technologyinfrastructure 130.

As noted, the information technology infrastructure controller 110 mayperform a multitier validation of the execution plan 190. Theconfigurations associated with the execution plan 190 may be applied atthe first information technology infrastructure 130 a if theconfigurations associated with the execution plan 190 successfullypasses the multitier validation including, for example, by beingstructurally valid, complying with at least one policy, and meeting atleast one cost quota. By contrast, the information technologyinfrastructure controller 110 may also determine that the execution plan190 fails to pass at least a portion of the multitier validation. Forexample, the information technology infrastructure controller 110 maydetermine that the configurations associated with the execution plan 190are not structurally valid (323-N). Alternatively, the informationtechnology infrastructure controller 110 may determine that theconfigurations associated with the execution plan 190 do not comply withat least one policy (325-N). The information technology infrastructurecontroller 110 may also determine that the configurations associatedwith the execution plan 190 do not meet at least one cost quota (327-N).

In the event the information technology infrastructure controller 110determines that the execution plan 190 fails to pass any portion of themultitier validation, the information technology infrastructurecontroller 110 may determine if the failed requirement is mandatory(329). In some example embodiments, as part of the multitier validation,the execution plan 190 may be validated against requirements classifiedas advisory, mandatory, and/or semi-mandatory. For example, thestructural validity of the execution plan 190 may be classified as amandatory requirement. By contrast, the policy compliance of theexecution plan 190 may be classified as a semi-mandatory requirementwhereas the cost quota compliance of the execution plan 190 may beclassified as an advisory requirement. As noted, while advisoryrequirements and semi-mandatory requirements may be overridden, amandatory requirement must be satisfied before the configurationsassociated with the execution plan 190 may be applied at the firstinformation technology infrastructure 130 a.

Accordingly, if the information technology infrastructure controller 110determines that the execution plan 190 failed a mandatory requirement(329-Y), the information technology infrastructure controller 110 mayprevent the one or more configurations associated with the executionplan 190 from being applied to the first information technologyinfrastructure 130 a (330). In some example embodiments, the informationtechnology infrastructure controller 110 may provide an indication ofthe execution plan 190 as having been successfully or unsuccessfullyvalidated by the validation engine 170. Alternatively and/oradditionally, the information technology infrastructure controller 110may provide an indication of the execution plan 190 as beingstructurally invalid and/or having passed or failed each of the firstpolicy 175 a, the second policy 175 b, the first quota 175 c, and/or thesecond quota 175 d. These indications may include any form ofnotification including, for example, an email, a slack message, awebhook, and/or the like.

Alternatively, if the information technology infrastructure controller110 determines that the execution plan 190 failed a non-mandatoryrequirement (329-N), the information technology infrastructurecontroller 110 may determine whether the requirement is overridden(331). If the information technology infrastructure controller 110determines that the execution plan 190 failed a non-mandatoryrequirement that is overridden (331-Y), the information technologyinfrastructure controller 110 may apply, to the first informationtechnology infrastructure 130 a, the one or more configurationsassociated with the execution plan 190. By contrast, if the informationtechnology infrastructure controller 110 determines that the executionplan 190 failed a non-mandatory requirement that is not overridden(331-N), the information technology infrastructure controller 110 mayprevent the one or more configurations associated with the executionplan 190 from being applied at the first information technologyinfrastructure 130 a (330).

FIG. 3C depicts a flowchart illustrating a process 350 for configuringthe information technology infrastructure 130, in accordance with someexample embodiments. Referring to FIGS. 1A-C, 2, and 3C, the process 350may be performed by the information technology infrastructure controller110 to enable the generation of the first configuration file 125 aand/or the second configuration file 125 b. As noted, the firstconfiguration file 125 a and/or the second configuration file 125 b maybe merged into the first workspace 165 a, the second workspace 165 b,and/or the third workspace 165 c. Meanwhile, the execution plan 190 maybe generated based at least on the configurations associated with thefirst workspace 165 a, the second workspace 165 b, and/or the thirdworkspace 165 c.

The information technology infrastructure controller 110 may receive,from the first user 145 a at the first client 120 a, a first indicationto publish an infrastructure module (352). For example, while creatingthe first configuration file 125 a at the first client 120 a, the firstuser 145 a may create the first module 116 a and/or the second module116 b. The first module 116 a and the second module 116 b may eachinclude the configurations that may be applied to the informationtechnology infrastructure 130 to achieve, at least partially, aninformation technology objective such as, for example, support for asoftware application, a multi-tier software application, self-serviceclusters, software demonstrations, disposable environments (e.g.,production environments, staging environments, and/or the like),software defined networking, resource schedulers, multi-clouddeployment, and/or the like. By publishing the first module 116 a and/orthe second module 116 b, the first user 145 a may render the firstmodule 116 a and/or the second module 116 b available for use by otherusers including, for example, the second user 145 b at the second client120 b.

The information technology infrastructure controller 110 may respond tothe first indication by at least storing, in the module registry 115, afirst version of the infrastructure module pulled from the versioncontroller 140 (354). Furthermore, the information technologyinfrastructure controller 110 may respond to the first indication by atleast registering, at the version controller 140, a webhook configuredto post, to the information technology infrastructure controller 110, anotification when a second version of the infrastructure module iscommitted to the version controller 140 (356). In some exampleembodiments, the first module 116 a and/or the second module 116 b maybe published may be published via the version controller 140. Publishingthe first module 116 a and/or the second module 116 b via the versioncontroller 140 may include registering, at the version controller 140, awebhook (e.g., a hypertext transfer protocol (HTTP) callback) configuredto post, to the information technology infrastructure controller 110, anotification whenever a different version of the first module 116 aand/or the second module 116 b is committed to the version controller140. As such, the information technology infrastructure controller 110may be able to update the module registry 115 whenever, for example, thefirst user 145 a creates another version of the first module 116 aand/or the second module 116 b. The update to the module registry 115may include, for example, incrementing the version number associatedwith the first module 116 a and/or the second module 116 b. Moreover,the second user 145 b may have access to multiple versions of the firstmodule 116 a and/or the second module 116 b including, for example, themost recent versions of the first module 116 a and/or the second module116 b.

It should be appreciated that the module registry 115 may be associatedwith the organization 155 such that only users from the organization 155may have access to the module registry 115, for example, to publishmodules, consume modules, and/or the like. As such, the first user 145 amay be able to publish the first module 116 a and/or the second module116 b only if the first user 145 a is associated with the organization155. Alternatively and/or additionally, access to the module registry115 may be role and/or permission based such that the first user 145 amay publish the first module 116 a and/or the second module 116 b to themodule registry 115 only if the first user 145 a is associated with theappropriate role and/or permissions

The information technology infrastructure controller 110 may receive,from the second user 145 b at the second client 120 b, a secondindication selecting the first version and/or the second version of theinfrastructure module (358). The information technology infrastructurecontroller 110 may respond to the second indication by at least sending,to the second client 120 b, the first version and/or the second versionof the infrastructure module for insertion into a configuration filebeing created at the second client 120 b (360). For example, whilecreating the second configuration file 125 b at the second client 120,the second user 145 b may select to add, to the second configurationfile 125 b, the first module 116 a and/or the second module 116 b. Thesecond user 145 b may select to add the first module 116 a and/or thesecond module 116 b instead of and/or in addition to creating thecorresponding configurations. The first module 116 a and/or the secondmodule 116 b may be added to the second configuration file 125 b inorder to achieve, at least partially, an information technologyobjective such as, for example, support for a software application, amulti-tier software application, self-service clusters, softwaredemonstrations, disposable environments (e.g., production environments,staging environments, and/or the like), software defined networking,resource schedulers, multi-cloud deployment, and/or the like.

As noted, the module registry 115 may be associated with theorganization 155 such that only users from the organization 155 may haveaccess to the module registry 115, for example, to publish modules,consume modules, and/or the like. As such, the second user 145 b mayaccess the module registry 115 to consume the first module 116 a and/orthe second module 116 b only if the second user 145 b is associated withthe organization 155. Alternatively and/or additionally, access to themodule registry 115 may be role and/or permission based such that thesecond user 145 b may access the module registry 115 to consume thefirst module 116 a and/or the second module 116 b only if the seconduser 145 b is associated with the appropriate role and/or permissions.The role and/or permissions associated with the second user 145 b mayfurther determine whether the second user 145 b is able to consumecertain modules from the module registry 115. For example, the roleand/or permissions associated with the second user 145 b may allow thesecond user 145 b to consume the first module 116 a but not the secondmodule 116 b.

The information technology infrastructure controller 110 may provide, tothe first client 120 a, a third indication of the first version and/orthe second version of the infrastructure module being selected forinsertion into the configuration file (362). In some exampleembodiments, the information technology infrastructure controller 110may generate and/or update a user interface to display, at the firstclient 120 a, an indication that the first module 116 a and/or thesecond module 116 b have been selected for insertion into the secondconfiguration file 125 b. For example, the indication may identify thesecond user 145 b at the second client 120 b as having selected thefirst module 116 a and/or the second module 116 b. Moreover, if thesecond configuration file 125 b is merged into the first workspace 165a, the indication from the information technology infrastructurecontroller 110 may further identify the first workspace 165 a as havingthe first module 116 a and/or the second module 116 b.

FIGS. 4A-N depict examples of user interfaces for creating andconfiguring a workspace, in accordance with some example embodiments.Referring to FIGS. 1A-C and 4A-P, the first user 145 a at the firstclient 120 a and/or the second user 145 b at the second client 120 b mayinteract with the user interfaces shown in FIGS. 4A-N to create and/orconfigure the first workspace 165 a, the second workspace 165 b, and/orthe third workspace 165 c.

Referring to FIG. 4A, a new workspace may be created by clicking on atab 2270. Alternatively and/or additionally, a workspace may also beimported by clicking on a second tab 2420 shown in FIG. 4B, which may betrigger the migration of legacy environments to a new organization whilepreserving their existing state and settings. A workspace may also becreated using a configuration designer 3010 shown in FIGS. 4H-J.

Referring again to FIG. 4B, a workspace name may be entered in a field2440. The workspace name may be unique and selected by combining one ormore distinguishing attributes including, for example, the resourcesbeing managed, the environment in which the resources run, the regioninto which the resources are provisioned, and/or the like. The userinterface shown in FIG. 4B may include a selection of sources 2460,which may include, for example, the version controller 140. Meanwhile,as shown in FIGS. 4B-C, the user interface may further provide aselection of repositories 2520 at, for example, the version controller140 from which the information technology infrastructure controller 110may pull the first configuration file 125 a and/or the secondconfiguration file 125 b.

Referring to FIG. 4D, the first user 145 a at the first client 120 aand/or the second user 145 b at the second client 120 b may select adirectory 2620 in which the information technology infrastructurecontroller 110 may run the execution plan 190. The directory 2620 may bespecified as a relative path from a root of the repository 2510 and setto a subdirectory matching a particular environment (e.g., production,staging, development, and/or the like) if multiple environments existwithin the same repository 2510. A version control branch 2640 of therepository for the workspace may also be selected, which may refer to aproduction branch, a staging branch, and/or a development branch.Furthermore, the first user 145 a at the first client 120 a and/or thesecond user 145 b at the second client 120 b may indicate, by selectinga box 2660, whether to recursively clone all of the submodules withinthe repository 2510 when fetching a configuration.

Referring to FIGS. 4E-G, a workspace may include different types ofvariables. For example, the workspace may include variables may definingthe parameters for a configuration and environment variables affecting abehavior of the information technology infrastructure controller 110.Alternatively and/or additionally, the workspace may include shellenvironment variables used, for example, by the first provider 150 aand/or the second provider 150 b, for credentials and/or other data. Ifa required variable is missing, an execution plan in the workspace mayfail and a corresponding run log may be updated accordingly. Variablesin the workspace may be identified in any manner including, for example,by reviewing programming code and/or documentation.

Variables in a workspace may be edited either via the example of theuser interface shown in FIGS. 4E-G and/or via an application programminginterface (API). Variables may also be uploaded via, for example, thefirst configuration file 125 a and/or the second configuration file 125b. For large quantities of complex variables, a command line interface(CLI) tool may be used to update the variables in the workspace using alocal variables file.

FIGS. 4E-G further depict how the variables of the workspace may beedited using a first button 2710 and/or a second button 2740. Inparticular, FIGS. 4F-G depict examples of the user interface when afirst variable 2810 and a second variable 2910 are in an editing mode.New variables may also be added by completing the field 2890 and/or thefield 2990 before clicking the button 2830 and/or the button 2930.Variables may also be removed by clicking on the button 2820 and/or thebutton 2920. Where the field 2860 and/or the field 2960 containsensitive values (e.g., passwords, keys, and/or the like), these valuesmay be securely stored by checking the box 2840 and/or the box 2940.

It should be appreciated that marking a variable as sensitive may limitshow the first user 145 a at the first client 120 a and/or the seconduser 145 b at the second client 120 b may interact with the variable.For example, no user including, for example, the user who created and/ormodified the variable, may view and/or modify the value of the variable,whether displayed in a user interface and/or retrieved via anapplication programming interface (API). Instead, modifying a sensitivevariable may require deleting the existing variable and creating a newvariable. The values of at least some variables may be encrypted priorto being stored, for example, as part of the workspace.

FIG. 4H depicts the configuration designer 3010 used to outline aconfiguration for a new workspace, which may include, selecting from themodule registry 115, the first module 116 a, the second module 116 b,and/or the like. The variables of the selected module may be listed as afillable hypertext markup language (HTML) form, with a helper interfacefor finding interpolatable values. Once completed, the configurationdesigner 3010 may return the first configuration file 125 a and/or thesecond configuration file 125 b, which may subsequently merged into theworkspace.

To select and/or add, for example, to the second configuration file 125b, the first module 116 a and/or the second module 116 b, the seconduser 145 b at the second client 120 b may navigate to a list of modulesusing the button 3085. The “Select Modules” page 3000 may display afilterable and/or searchable list 3030 of at least a portion of themodules available from the module registry 115. Any quantity of modulesfrom the filterable and/or searchable list 3030 may be added to byclicking the button 3020. List 3040 may display a list of the selectedmodules.

By default, selecting a module may add the most recent version of themodule, for example, to the second configuration file 125 b. A differentversion of the module may be selected by clicking on the module'sversion number 3050 in the list 3040. The “Set Variables” page 3015shown in FIG. 4J may be accessed by clicking the button 3070. The “SetVariables” page 3015 may display a variables list 3090 for the module3082 selected from the list 3080. The variables list 3090 of the module3082 may be viewed by clicking the button 3084. Each variable may belabeled as required or optional. Once a value is set for all of amodule's required variables, the button 3084 may change to a“configured” button. When all modules are configured, FIG. 4I shows thatthe finished configuration may be viewed by clicking the button 3086.

As shown in FIG. 4J, one user may delegate the setting and/or modifyingof a variable in a module to another users by selecting a “deferred”checkbox, which ties the value of the variable to a new top-levelvariable having no default value. Anyone creating a workspace using themodule may have an opportunity to provide a value for the delegatedvariable. Once complete, the first configuration file 125 a and/or thesecond configuration file 125 b may be viewed by clicking the button3086. The corresponding code may be copied into a text editor, saved asa main.tf file in a new directory, and committed to the versioncontroller 140 to enable subsequent merging into a correspondingworkspace. Additional changes to the first configuration file 125 aand/or the second configuration file 125 b may be made without selectingand adding existing modules from the module registry 115.

Referring to FIG. 4K, only team 420 with administrative access for aworkspace may make changes to settings of the workspace. The informationtechnology infrastructure controller 110 may be configured toautomatically apply the execution plan 190 by selecting the auto applyoption. When the auto apply option is selected, the informationtechnology infrastructure controller 110 may automatically apply, to theinformation technology infrastructure 130, the configurations associatedwith the execution plan 190, for example, when the execution plan 190 issuccessfully validated. By contrast, if the manual apply option isselected, the first user 145 a at the first client 120 a and/or thesecond user 145 b at the second client 120 b may be required to providea confirmation before the configurations associated with the executionplan 190 are applied to the information technology infrastructure 130.

Referring to FIG. 4L, if a key is required for the repository linked tothe workspace, then a unique identifier associated with the key may beselected in the field 3470. Clicking the button 3410 may update the key,which may be modified by the first user 145 a and/or the second user 145b if the first user 145 a and/or the second user 145 b haveadministrative access. The information technology infrastructurecontroller 110 may use the key for cloning modules used during one ormore runs of the execution plan 190. As used here, the key may refer to,for example, a secure shell (SSH) key.

A workspace may be locked and/or unlocked by the first user 145 a and/orthe second user 145 b if the first user 145 a and/or the second user 145b has write access or administrative access. Locking a workspace mayprevent users with write access from manually queuing runs, preventautomatic runs due to the first configuration file 125 a and/or thesecond configuration file 125 b being committed to the versioncontroller 140, prevent creation of runs via an application programminginterface (API), prevent creation of runs using a command line interface(CLI) tool, and/or the like. To enable runs, the workspace may beunlocked via the toggle button 3430.

In some example embodiments, having administrative access may enable thefirst user 145 a and/or the second user 145 b to delete a workspace.Before deleting the workspace, the first user 145 a and/or the seconduser 145 b may set the environment variable “CONFIRM_DESTROY” to “1” forthe workspace and queue a destroy plan. Queueing a destroy plan maydestroy the resources in the information technology infrastructure 130managed by the workspace. It should be appreciated that resources mustbe destroyed before deleting a corresponding workspace. Otherwise, ifthe resources are not destroyed before deleting the workspace, theseresources may become unmanaged and may require destruction by the firstprovider 150 a and/or the second provider 150 b.

In some example embodiments, the information technology infrastructurecontroller 110 may store one or more keys (e.g., secure shell (SSH)keys) such that the keys may be used in that clones modules from aserver that requires credentials such as, for example, the versioncontroller 140. The information technology infrastructure controller 110may manage the keys used to clone modules at the organization level andmay allow multiple keys to be associated with, for example, theorganization 155. Keys may be added or deleted via organizationalsettings. Once a key is uploaded, the text of the key may be hidden fromthe first user 145 a at the first client 120 a and/or the second user145 b at the second client 120 b.

The first user 145 a and/or the second user 145 b may set up anorganizational key using, for example, the user interface shown in FIG.4M. For example, as shown in FIG. 4M, to add a key (e.g., a secure shell(SSH) key) to the information technology infrastructure controller 110,the first user 145 a and/or the second user 145 b may obtain a key pairthat the information technology infrastructure controller 110 may use todownload one or more modules (e.g., the first module 116 a, the secondmodule 116 b, and/or the like) during the running, for example, of theexecution plan 190. A key pair may be created using the followingcommand: ssh-keygen-t rsa-f “/Users/<NAME>/.ssh/service_tfe”-C“service_terraform_enterprise”

The command above may create a service_tfe file with a private key aswell as a service_tfe.pub file with the public key. The public key maybe distributed, for example, to the version controller 140. Meanwhile,as shown in FIG. 4M, a unique identifier for the private key 1040 may beentered in the field 3570 and the text of the private key 1040 may beentered in the field 3520 before the private key 1040 may be added byclicking the “Add Private SSH Key” button. Upon adding the private key1040, the key may appear in the list of keys 3740, which may list theprivate key 1040 using the unique identifier 1062 of the private key1040. While the information technology infrastructure controller 110 mayretain the text of the private key 1040, the text of the private key1040 may remain hidden from the first user 145 a and/or the second user145 b.

Furthermore, FIGS. 4N-M show that to delete a key (e.g., a secure shell(SSH) key), the first user 145 a and/or the second user 145 b mayreplace the key in the field 3470 in the workspace settings of theworkspaces that use the key with another key. The first user 145 aand/or the second user 145 b may further click the “Destroy” button nextto the keys' unique identifier in the list of keys 3740.

As noted, the first user 145 a and/or the second user 145 b may haveaccess (e.g., read access, write access, administrative access, and/orthe like) to a workspace by being associated with a team having accessto the workspace. As shown in FIG. 4M, a team may be accorded access tothe workspace by being added to the workspace and by setting the accessprivileges associated with the team. Each workspace may be associatedwith at least one team (e.g., the team 3260) that has full access to theworkspace including, for example, read access, write access,administrative access, and/or the like. Removing a team from a workspacemay remove the team's access to the workspace.

Referring now to FIG. 5A, all users in the organization 155 (e.g., thefirst user 145 a, the second user 145 b, and/or the like) may view themodule registry 115, which may be associated exclusively with theorganization 196. Alternatively, one or more of the modules in themodule registry 115 may only be visible to some users or groups of userswithin the organization 155 but remain hidden from others users orgroups of users within the organization 155. In some exampleembodiments, a workspace associated with the organization 155 may onlybe permitted to use modules associated with the organization 155. For amodule to be available to users from more than one organization, thesame module may be added to the module registry of each organization.

As shown in FIG. 5A, a list of available modules for an organization maybe accessed by clicking the button 4020 in the main navigation bar. Themodules page 4000 may list the available modules for an organization.The drop-down 4010 may be used to filter the list to show modules forone or more selected providers. The field 4050 may be used to enter asearch for modules by keyword. The details associated with a module maybe viewed by clicking the button 4060. The dropdown 4070 may be used toswitch between different versions of the same module. Selecting the tabs4110 may provide detailed documentation for each version of a module.Any module from an organization's module registry may be added to aconfiguration file such as, for example, the first configuration file125 a, the second configuration file 125 b, and/or the like. Table 6below depicts the syntax for referencing modules in source attributes.

TABLE 6 <TFE HOSTNAME>/<TFE ORGANIZATION>/<MODULE NAME>/<PROVIDER>

As noted, the module registry 115 may allow a corresponding organizationto publish configuration modules for consumption by users across anorganization 155. The privilege to publish, for example, the firstmodule 116 a and/or the second module 116 b to the module registry 115may be limited to certain users and/or certain teams within theorganization 155. Once the first module 116 a and/or the second module116 b is published to the module registry 115, the version controller140 may be configured to manage the release of new versions of the firstmodule 116 a and/or the second module 116 b.

The first module 116 a and/or the second module 116 b may be publishedto the module registry 115 of the organization 155 by at least providingthe name of a corresponding repository to the information technologyinfrastructure controller 110. The module registry 115 may use the nameof the repository to determine a name and a provider for each of thefirst module 116 and/or the second module 116 b. The module registry 115may further use the repository's tags to identify one or more availableversions of the first module 116 and/or the second module 116 b.Furthermore, the module registry may format documentation for eachversion of the first module 116 a and/or the second module 116 b basedon the corresponding README and/or configurations in the repository. Anew version of the first module 116 and/or the second module 116 b maybe released by pushing a new tag to its repository. The module registry115 may be update automatically, for example, to include new versions ofthe first module 116 a and/or the second module 116 b.

Consumers of a module don't need access to its source repository, themodule registry 115 may handle downloads and may further use applicationprogramming interface (API) tokens associated with the informationtechnology infrastructure controller 110 to control access to the moduleregistry 115 and/or any infrastructure modules at the module registry115. Modules can be shared by multiple organizations by sharing theunderlying VCS repository. Each organization 155 is granted access tothe module's repository and then added to each organization's moduleregistry. When tags are pushed to publish new module versions of themodules, all organizations' registries will update appropriately.

In some example embodiments, a module repository may reside at theversion controller 140 while the information technology infrastructurecontroller 110 may have access (e.g., administrative access) to thatrepository. Since the module registry 115 may rely on a webhook toimport new versions of the first module 116 a and/or the second module116 b from the version controller 140, the information technologyinfrastructure controller 110 may be required to have sufficient accessprivileges to create the webhook. The first module 116 a and/or thesecond module 116 b may be required to conform to a standard structureto enable the module registry 115 to perform inspection, generatedocumentation, track resource usage, and/or the like.

As shown in FIG. 5A, the first module 116 a and/or the second module 116b may be published clicking the button 4030 on the modules page 4000,selecting the version controller 140 the list of VCS providers 4230,entering the name of the repository, and clicking on the button 4210. Anew version of the first module 116 a and/or the second module 116 b maybe added by pushing a new version tag to a corresponding repository atthe version controller 140. Pushing the new version tag (e.g., v1.0.4and 0.9.2) may cause the module registry 115 to automatically import thenew version of the first module 116 a and/or the second module 116 b.The module registry 115 may be configured to import new versions of thefirst module 116 a and/or the second module 116 b automatically, forexample, when new versions of the first module 116 a and/or the secondmodule 116 b are detected at the VCS providers 4230. Alternativelyand/or additionally, the module registry 115 may interact with the VCSprovider 4230 periodically to determine whether new versions of thefirst module 116 a and/or the second module 116 b have been added to theVCS provider 4230.

Referring to FIG. 5B, the first module 116 a, the second module 116 b,and/or any version thereof may be navigating to the module's detailspage. Each module's details page may include the button 4120, which maybe used to delete a version of the module and/or the module in itsentirety. For example, a single version of a module may be deleted byselecting the version of the module to be deleted and then clicking onthe button 4120.

FIGS. 6A-C depict examples of user interfaces for interacting with runswithin a workspace. Referring to FIG. 6A, all runs of the execution plan190 may be performed within at least one workspace such as, for example,the first workspace 165 a, the second workspace 165 b, and/or the thirdworkspace 165 c. The first workspace 165 a, the second workspace 165 b,and/or the third workspace 165 c may provide the state 526, thevariables 3750, and the variables 3760 required for the run. The firstworkspace 165 a, the second workspace 165 b, and/or the third workspace165 c may further specify the sources 810 and 820 of the configuration.Each workspace may include a button 3755 to start a run, a link 3765 tothe full list of runs, and a link 3775 to the most recent active run orthe last completed run. It should be appreciated that the most recentactive run may not be the most recently initiated run because pendingruns may remain inactive until the completion of a current run. Runs maybe processed one at a time in order and only one active run may bepermitted for each workspace. Whenever a new run is initiated, the runmay be added to an end of a run queue. When a run in progress, the newrun may be held in abeyance until the current run is complete.

The runs page may display the run name 3720, the identity of the userwho initiated the run 3710, and the source of the run start 3730 (e.g.,version controller 140, the information technology infrastructurecontroller 110, and/or the like). The run page may also display the nameof the branch 3770, the code commit for the run 3760, and the status ofthe run 3750. As noted, a run may be started via the informationtechnology infrastructure controller 110 or the version controller 140.Alternatively, a run may also be created via a command line interface(CLI) and initiated via a user interface. When a run is initiated, theinformation technology infrastructure controller 110 may lock the run,for example, to the first configuration file 125 a. Any subsequentchanges, for example, from the second configuration file 125 b, mayapply to future runs but not the runs that are already in progress(e.g., pending, planning, or awaiting to be applied to the informationtechnology infrastructure 130).

The information technology infrastructure controller 110 may beconfigured to initiate a run for the execution plan 190 automatically.Whenever a new commit is detected at the version controller 140, theinformation technology infrastructure controller 110 may respond byqueuing a corresponding plan. The first user 145 a and/or the seconduser 145 b may also queue a plan, for example, after editing one or morevariables associated with the first workspace 165 a, the secondworkspace 165 b, and/or the third workspace 165 c. Each run of a planmay pass through several stages of action including, for example,pending, planning, policy checking, applying, complete, and/or the like.The information technology infrastructure controller 110 may beconfigured to provide an indication of the status of each run. Forexample, in the list of workspaces, each workspace may be shown with thestatus of a current run and/or the most recently completed run.

FIG. 6B depicts an individual run page configured to display theprogress and outcomes of each stage of a run. The run page may show acurrent status of the run 3820, the code commit associated with the run3810, the manner in which the run was initiated 3865, when the run wasinitiated 3885, the user 3840 initiating the run, a timeline of eventsrelated to the run, the output 3930 from the plan, and/or the like.

Where a user has sufficient access privileges (e.g., write access) to aworkspace, the run page may provide controls for interacting with a runwhile the run is in progress. For example, the run may be cancelledwhile the run is in progress or the execution plan 190 may be discardedbefore the execution plan 190 is applied during the run. One or more ofthe first policy 175 a, the second policy 175 b, first quota 175 c,and/or the second quota 175 d may also be overridden and thus excludedfrom the validation of the execution plan 190. A user with sufficientaccess privileges (e.g., write access or administrative access) to theworkspace may temporarily suspend the queuing of runs by at leastlocking the workspace. New runs may remain in a pending state until theworkspace is unlocked.

Current and historical state data for a workspace may be viewed from a“states” tab. Each state in the list may be associated with a run and/ora commit to the version controller 140. Each state in the list may befurther associated with a link to a raw state file and a delta filestoring one or more differences between a current state and a previousstate. A given workspace may access state data for workspaces within thesame organization (e.g., the first workspace 165 a, the second workspace165 b, and/or the third workspace 165 c associated with the organization155). In some example embodiments, outputs from other workspaces may beaccessed remotely, for example, by being added as a data source in thefirst configuration file 125 a and/or the second configuration file.

In some example embodiments, the information technology infrastructurecontroller 110 may generate a token (e.g., an application programminginterface (API) token) that is unique to each run. The token may beexported to the shell environment. Moreover, the token may be used toread and/or write state data for the workspace associated with the runas well as to read state data from any other workspace in the sameorganization 155. However, a token may become invalid after acorresponding run is complete.

FIG. 7 depicts a block diagram illustrating a computing system 700consistent with implementations of the current subject matter. Referringto FIGS. 1A-C and 7, the computing system 700 can be used to implementthe information technology infrastructure controller 110 and/or anycomponents therein.

As shown in FIG. 7, the computing system 700 can include a processor710, a memory 720, a storage device 730, and input/output device 740.The processor 710, the memory 720, the storage device 730, and theinput/output device 740 can be interconnected via a system bus 750. Theprocessor 710 is capable of processing instructions for execution withinthe computing system 700. Such executed instructions can implement oneor more components of, for example, the information technologyinfrastructure controller 110. In some implementations of the currentsubject matter, the processor 710 can be a single-threaded processor.Alternately, the processor 710 can be a multi-threaded processor. Theprocessor 710 is capable of processing instructions stored in the memory720 and/or on the storage device 730 to display graphical informationfor a user interface provided via the input/output device 740.

The memory 720 is a computer readable medium such as volatile ornon-volatile that stores information within the computing system 700.The memory 720 can store data structures representing configurationobject databases, for example. The storage device 730 is capable ofproviding persistent storage for the computing system 700. The storagedevice 730 can be a floppy disk device, a hard disk device, an opticaldisk device, a tape device, a solid state device, and/or any othersuitable persistent storage means. The input/output device 740 providesinput/output operations for the computing system 700. In someimplementations of the current subject matter, the input/output device740 includes a keyboard and/or pointing device. In variousimplementations, the input/output device 740 includes a display unit fordisplaying graphical user interfaces.

According to some implementations of the current subject matter, theinput/output device 740 can provide input/output operations for anetwork device. For example, the input/output device 740 can includeEthernet ports or other networking ports to communicate with one or morewired and/or wireless networks (e.g., a local area network (LAN), a widearea network (WAN), the Internet).

In some implementations of the current subject matter, the computingsystem 700 can be used to execute various interactive computer softwareapplications that can be used for organization, analysis and/or storageof data in various (e.g., tabular) format (e.g., Microsoft Excel®,and/or any other type of software). Alternatively, the computing system700 can be used to execute any type of software applications. Theseapplications can be used to perform various functionalities, e.g.,planning functionalities (e.g., generating, managing, editing ofspreadsheet documents, word processing documents, and/or any otherobjects, etc.), computing functionalities, communicationsfunctionalities, etc. The applications can include various add-infunctionalities or can be standalone computing products and/orfunctionalities. Upon activation within the applications, thefunctionalities can be used to generate the user interface provided viathe input/output device 740. The user interface can be generated andpresented to a user by the computing system 700 (e.g., on a computerscreen monitor, etc.).

One or more aspects or features of the subject matter described hereincan be realized in digital electronic circuitry, integrated circuitry,specially designed ASICs, field programmable gate arrays (FPGAs)computer hardware, firmware, software, and/or combinations thereof.These various aspects or features can include implementation in one ormore computer programs that are executable and/or interpretable on aprogrammable system including at least one programmable processor, whichcan be special or general purpose, coupled to receive data andinstructions from, and to transmit data and instructions to, a storagesystem, at least one input device, and at least one output device. Theprogrammable system or computing system can include users and servers. Auser and server are generally remote from each other and typicallyinteract through a communication network. The relationship of user andserver arises by virtue of computer programs running on the respectivecomputers and having a user-server relationship to each other.

These computer programs, which can also be referred to as programs,software, software applications, applications, components, or code,include machine instructions for a programmable processor, and can beimplemented in a high-level procedural and/or object-orientedprogramming language, and/or in assembly/machine language. As usedherein, the term “machine-readable medium” refers to any computerprogram product, apparatus and/or device, such as for example magneticdiscs, optical disks, memory, and Programmable Logic Devices (PLDs),used to provide machine instructions and/or data to a programmableprocessor, including a machine-readable medium that receives machineinstructions as a machine-readable signal. The term “machine-readablesignal” refers to any signal used to provide machine instructions and/ordata to a programmable processor. The machine-readable medium can storesuch machine instructions non-transitorily, such as for example as woulda non-transient solid-state memory or a magnetic hard drive or anyequivalent storage medium. The machine-readable medium can alternativelyor additionally store such machine instructions in a transient manner,such as for example, as would a processor cache or other random accessmemory associated with one or more physical processor cores.

To provide for interaction with a user, one or more aspects or featuresof the subject matter described herein can be implemented on a computerhaving a display device, such as for example a cathode ray tube (CRT) ora liquid crystal display (LCD) or a light emitting diode (LED) monitorfor displaying information to the user and a keyboard and a pointingdevice, such as for example a mouse or a trackball, by which the usercan provide input to the computer. Other kinds of devices can be used toprovide for interaction with a user as well. For example, feedbackprovided to the user can be any form of sensory feedback, such as forexample visual feedback, auditory feedback, or tactile feedback; andinput from the user can be received in any form, including acoustic,speech, or tactile input. Other possible input devices include touchscreens or other touch-sensitive devices such as single or multi-pointresistive or capacitive track pads, voice recognition hardware andsoftware, optical scanners, optical pointers, digital image capturedevices and associated interpretation software, and the like.

The subject matter described herein can be embodied in systems,apparatus, methods, and/or articles depending on the desiredconfiguration. The implementations set forth in the foregoingdescription do not represent all implementations consistent with thesubject matter described herein. Instead, they are merely some examplesconsistent with aspects related to the described subject matter.Although a few variations have been described in detail above, othermodifications or additions are possible. In particular, further featuresand/or variations can be provided in addition to those set forth herein.For example, the implementations described above can be directed tovarious combinations and subcombinations of the disclosed featuresand/or combinations and subcombinations of several further featuresdisclosed above. In addition, the logic flows depicted in theaccompanying figures and/or described herein do not necessarily requirethe particular order shown, or sequential order, to achieve desirableresults. For example, the logic flows can include different and/oradditional operations than shown without departing from the scope of thepresent disclosure. One or more operations of the logic flows can berepeated and/or omitted without departing from the scope of the presentdisclosure. Other implementations can be within the scope of thefollowing claims.

What is claimed is:
 1. A system, comprising: at least one dataprocessor; and at least one memory storing instructions which, whenexecuted by the at least one data processor, result in operationscomprising: receiving, from a first user at a first client, a firstindication to publish a first infrastructure module, the firstinfrastructure module comprising a first set of configurations to applyto an information technology infrastructure; responding to the firstindication by at least storing, in a module registry, the firstinfrastructure module; receiving, from a second user at a second client,a second indication selecting the first infrastructure module; andresponding to the second indication by at least sending, from the moduleregistry to the second client, the first infrastructure module forinsertion into a configuration file being created at the second client,the insertion of the first infrastructure module incorporating, into theconfiguration file, the first set of configurations to apply to theinformation technology infrastructure.
 2. The system of claim 1, furthercomprising: responding to the first indication by registering, at aversion controller, a webhook configured to post a notification inresponse to a first version of the first infrastructure module and/or asecond version of the first infrastructure module being committed to theversion controller.
 3. The system of claim 2, further comprising:responding to the notification by at least pulling, from the versioncontroller, the first version of the first infrastructure module and/orthe second version of the first infrastructure module.
 4. The system ofclaim 1, further comprising: generating a user interface configured todisplay, at the second client, a selection of infrastructure modules forinsertion into the configuration file, the selection of infrastructuremodules including the first infrastructure module, and the selection ofinfrastructure modules further including a second infrastructure modulethat comprises a second set of configurations to apply to theinformation technology infrastructure.
 5. The system of claim 4, whereinthe second user at the second client interacts with the user interfaceto merge, into a workspace, the configuration file including the firstinfrastructure module, the workspace being configured to maintain aplurality of configurations to apply to the information technologyinfrastructure, and the merging of the configuration file into theworkspace incorporates, into the plurality of configurations maintainedby the workspace, the first set of configurations associated with thefirst infrastructure module.
 6. The system of claim 5, furthercomprising: in response to the configuration file being merged into theworkspace, sending, to the first client, a third indication of the firstinfrastructure module being used in the workspace.
 7. The system ofclaim 4, wherein the selection of infrastructure modules furtherincludes a first version of the first infrastructure module and a secondversion of the first infrastructure module, and wherein the secondindication from the second user further selects the first version of thefirst infrastructure module or the second version of the firstinfrastructure module for insertion into the configuration file.
 8. Thesystem of claim 4, further comprising: receiving, from the second userat the second client, a third indication selecting the secondinfrastructure module; and responding to the third indication by atleast sending, to the second client, the second infrastructure modulefor insertion into the configuration file being created at the secondclient, the insertion of the second infrastructure module incorporating,into the configuration file, the second set of configurations to applyto the information technology infrastructure.
 9. The system of claim 1,wherein the configuration file includes a programming code-basedrepresentation of one or more resources at the information technologyinfrastructure.
 10. The system of claim 1, wherein applying the firstset of configurations at the information technology infrastructureincludes provisioning, modifying, and/or de-provisioning one or moreresources at the information technology infrastructure.
 11. The systemof claim 1, wherein applying the first set of configurations at theinformation technology infrastructure at least a partially achieves apredefined information technology objective comprising one or more ofsupport for a software application, a multi-tier software application,self-service clusters, a software demonstration, a disposableenvironment, software defined networking, a resource scheduler, and/or amulti-cloud deployment.
 12. The system of claim 1, wherein the moduleregistry is associated with an organization, and wherein the moduleregistry is accessible to the first user and the second user based atleast on the first user and the second user being associated with theorganization.
 13. The system of claim 1, wherein the module registry isaccessible to the first user but not the second user based at least on arole and/or a permission associated with each of the first user and/orthe second user.
 14. A computer-implemented method, comprising:receiving, from a first user at a first client, a first indication topublish a first infrastructure module, the first infrastructure modulecomprising a first set of configurations to apply to an informationtechnology infrastructure; responding to the first indication by atleast storing, in a module registry, the first infrastructure module;receiving, from a second user at a second client, a second indicationselecting the first infrastructure module; and responding to the secondindication by at least sending, from the module registry to the secondclient, the first infrastructure module for insertion into aconfiguration file being created at the second client, the insertion ofthe first infrastructure module incorporating, into configuration file,the first set of configurations to apply to the information technologyinfrastructure.
 15. The method of claim 14, further comprising:responding to the first indication by registering, at a versioncontroller, a webhook configured to post a notification in response to afirst version of the first infrastructure module and/or a second versionof the first infrastructure module being committed to the versioncontroller.
 16. The method of claim 15, further comprising: respondingto the notification by at least pulling, from the version controller,the first version of the first infrastructure module and/or the secondversion of the first infrastructure module.
 17. The method of claim 14,further comprising: generating a user interface configured to display,at the second client, a selection of infrastructure modules forinsertion into the configuration file, the selection of infrastructuremodules including the first infrastructure module, and the selection ofinfrastructure modules further including a second infrastructure modulethat comprises a second set of configurations to apply to theinformation technology infrastructure.
 18. The method of claim 17,wherein the second user at the second client interacts with the userinterface to merge, into a workspace, the configuration file includingthe first infrastructure module, the workspace being configured tomaintain a plurality of configurations to apply to the informationtechnology infrastructure, and the merging of the configuration fileinto the workspace incorporates, into the plurality of configurationsmaintained by the workspace, the first set of configurations associatedwith the first infrastructure module.
 19. The method of claim 18,further comprising: in response to the configuration file being mergedinto the workspace, sending, to the first client, a third indication ofthe first infrastructure module being used in the workspace.
 20. Themethod of claim 17, wherein the selection of infrastructure modulesfurther includes a first version of the first infrastructure module anda second version of the first infrastructure module, and wherein thesecond indication from the second user further selects the first versionof the first infrastructure module or the second version of the firstinfrastructure module for insertion into the configuration file.
 21. Themethod of claim 17, further comprising: receiving, from the second userat the second client, a third indication selecting the secondinfrastructure module; and responding to the third indication by atleast sending, to the second client, the second infrastructure modulefor insertion into the configuration file being created at the secondclient, the insertion of the second infrastructure module incorporating,into configuration file, the second set of configurations to apply tothe information technology infrastructure.
 22. The method of claim 14,wherein the configuration file includes a programming code-basedrepresentation of one or more resources at the information technologyinfrastructure.
 23. The method of claim 14, wherein applying the firstset of configurations at the information technology infrastructureincludes provisioning, modifying, and/or de-provisioning one or moreresources at the information technology infrastructure.
 24. The methodof claim 14, wherein applying the first set of configurations at theinformation technology infrastructure at least a partially achieves apredefined information technology objective comprising one or more ofsupport for a software application, a multi-tier software application,self-service clusters, a software demonstration, a disposableenvironment, software defined networking, a resource scheduler, and/or amulti-cloud deployment.
 25. The method of claim 14, wherein the moduleregistry is associated with an organization, and wherein the moduleregistry is accessible to the first user and the second user based atleast on the first user and the second user being associated with theorganization.
 26. The method of claim 14, wherein the module registry isaccessible to the first user but not the second user based at least on arole and/or a permission associated with each of the first user and/orthe second user.
 27. A non-transitory computer readable medium storinginstructions, which when executed by at least one data processor, resultin operations comprising: receiving, from a first user at a firstclient, a first indication to publish a first infrastructure module, thefirst infrastructure module comprising a first set of configurations toapply to an information technology infrastructure; responding to thefirst indication by at least storing, in a module registry, the firstinfrastructure module; receiving, from a second user at a second client,a second indication selecting the first infrastructure module; andresponding to the second indication by at least sending, from the moduleregistry to the second client, the first infrastructure module forinsertion into a configuration file being created at the second client,the insertion of the first infrastructure module incorporating, into theconfiguration file, the first set of configurations to apply to theinformation technology infrastructure.